2011-01-23 28 views
58

Sonsuz bir döngüden geçen ve verileri işleyen bir formum var. Formu "kapatan" bir düğmeyi tıkladığımda, form kapatılsa bile işleme devam eder. Formun tamamen bitmesini ve döngü deyiminden çıkmasını ve sonra yeni bir form açmasını istiyorum. İşte VB.NET - Kesinti form döngüsü ve bitiş formu

Ben formu

frmMain.Close() 
frmMain.Dispose() 

Not kapatmak için kullanıyorum kodudur: Ben sadece basit VB.NET uygulama var konuları kullanmıyorum. Ana başlangıç ​​formunu kapatmıyorum.

cevap

82

Bunu yapmanın "doğru" yolu arka plan çalışan iş parçacığıyla gerçekten. Fakat bu aynı zamanda arka plan işçiliğine ihtiyaç duymadan da çalışacaktır.

Form sınıfında bir değişken bildirin.

Private keepLoopAlive As Boolean 

Ardından olmak için işleme döngü yazma gibi bir şey:

keepLoopAlive = True 

Do While keepLoopAlive 

    (your code that loops here) 

    DoEvents 

Loop 

Sonra Kapat olayı yapın: Bu döngü onu alır ilk fırsatta sona neden olacaktır

keepLoopAlive = False 
Me.Close() 

, ve formunuz kapanmalı.

Yazım hatası olabileceğinden, bu kodu bir IDE'de değil, belleğe yazdığımı lütfen unutmayın.

+1

Teşekkürler! Bunu programımda uygulamaya son verdim ve harika çalışıyor! Başlangıçta, özellikle döngüden çıkmak zorunda kalmadan form sürecini aniden sonlandırabilir miyim diye soruyordum ama bu mümkün değil gibi geliyor. – Phil

+1

İşlemi, döngüyü öldürmeden sonlandırabilirsiniz. En az üç kolay yolu vardır. Net: iş parçacığı üzerinde "IsBackground" öğesini "true" olarak ayarlayın ve tüm ön plan iş parçacıklarını sonlandırın veya Environment.FailFast() veya Environment.Exit() öğesini çağırın. – codekaizen

+43

Tüm Google çalışanları için: Doğru yolun Arka Plan çalışanını kullanmak olduğunu unutmayın. –

11

Bu bir .NET geliştiricisiyim, bu yüzden geçerli olmayabilir, ancak sonsuz bir döngü gerçekleştiriyor olsaydım, her başlattığımda, döngünün hala bir tür boolean değeriyle geçerli olduğunu kontrol ederdim, ve eğer öyleyse Başarısız, döngüden çık.

Formu kapattığınızda, boolean değerini false olarak ayarlayın ve bırakılacak ve döngüyü bekleyen ve yeniden başlatan bir dış döngüye sahip olabilirsiniz veya tüm işlevi başka bir zaman yeniden başlatabilirsiniz.