2012-11-15 44 views
0

希望一個簡單的問題,vb.net Form.Enabled VS From.Visible VS Form.Focused

我有一個線程在剛剛經歷了一堆東西環路的類運行。我想在用戶關閉窗體時停止線程。我有以下功能在我Form.vb

Public Function getFormStatus() As Boolean 
    Dim bAlive As Boolean = False 

    If Me.Enabled = True Then 
     bAlive = True 
    Else 
     bAlive = False 
    End If 

    Return bAlive 
End Function 

然後在我的主環型我

dim isAlive as Boolean = false 
isAlive = frm.getFormStatus 
while isAlive 
    do stuff 

我的問題是我不知道,告訴我是否該表格的屬性不是它目前活躍!我覺得這應該不難,但我已經嘗試了幾種不同的方法,但都沒有給出我預期的結果。

+0

是From.vb項目中的唯一形式,即。關閉時整個應用程序是否關閉?或者這只是程序中的一種形式?另外,當你說活動時,你的意思是仍然開放,而不是它是目前的形式?導致您的表單仍然可以打開,但不是活動表單。 – Kratz

+0

不,這不是我的項目的唯一形式,它是一個mdi孩子,並且關閉此表單,mdi父級仍然處於活動狀態 – Brandon

+0

您已經提出了此問題。您沒有領先,表格是否處於活動狀態與是否啓用無關。只要你在這個While循環中,表單激活狀態就不會發生,UI完全凍結。擺脫一切,以提前。 –

回答

0

一個線程是活動當它沒有完成運行它已被告知運行。雖然這可能聽起來很愚蠢,但在上例中,您會注意到,只要您處於while循環中,線程爲活動

如果您正在尋找執行UI線程的單獨線程,我建議您查看BackgroundWorker,因爲它可以使您的方法更加簡單易用。

關於活動窗體,可以通過ActiveForm屬性來實現。

Dim currentForm As Form = Form.ActiveForm 
+0

你是對的,抱歉我第一次錯過了。我不想讓線程停下來,我要讓線程繼續運行,我只是在它會跳過線程中的所有東西時纔會有條件,因爲這個表單不是主動的。只是想知道表單何時處於活動狀態,並且我看到了第二件事情,當調試並將鼠標懸停在.ActiveForm上時,它向我顯示'Nothing'是否有返回表單是否存在的方法? – Brandon

+0

@BrandonJ當您在while循環中運行時,您將永遠不會前進,因爲您的所有工作都存在於_same_線程中。嘗試尋找可以註冊的活動,以便在需要時執行操作。 –