2012-12-03 36 views
0

我在C#和一個側面類中有一個主窗體類。我正在創建side-class的實例並從該實例中調用該類的一個方法。該方法啓動新線程。現在我正在爲它們中的每一個創建多個實例並調用方法。所以,開始多個線程。現在我已經在side-class中實現了一個方法,以確保從與該線程關聯的方法離開時線程處於關閉狀態。 我不知道用戶是否突然點擊主框架窗口的X(關閉)按鈕,然後如何處理該邊框內的線程。如何確保在關閉主窗口時關閉所有側線(不同類)

P.S - 副類的實例在主窗體類的方法中實例化。所以,在處置的時候,我沒有與我的實例,所以我可以阻止他們。

回答

1

如果通過關閉主窗口來終止應用程序,那麼您可以在創建它們時在工作線程中,在輔助類中將IsBackground設置爲true。像這樣:

var newThread = new Thread(DoWork) {IsBackground = true}; 
    newThread.Start(); 

但是,如果關閉您的「主」窗口是不是應用程序的結束,然後在主窗口中應該保持的實例化的側類的引用的數組。然後,它應該在每個實例上放置/設置一個標誌,以表示該線程應該停止(你如何做到這一點取決於你 - 定期在side-class中檢查的標誌可能是合適的)。這個調用應該發生在'Main'窗口的OnClose中。

+0

我試圖終止應用程序時,交叉(x)按鈕將被點擊,並在同一時間,我想停止線程那些在另一個類的方法上運行。 正如你所說,我認爲這隻能通過在主窗體類中啓用一個標誌來處理它,並且連續檢查該標誌是否在副類中更改。如果更改,則停止該線程。 –

+1

在這種情況下,正如我所建議的那樣,當您在側面類中創建線程時,是否可以不將IsBackground標誌設置爲true?當前臺線程完成時,運行時會爲你終止這些線程。 – dashton

+0

好的。完成和工作。謝謝。所以,這個屬性告訴操作系統在主線程結束後立即終止線程。因爲它們是後臺線程。對? –

0

您可以將側線程設置爲在應用程序結束時關閉的BackGroundWorkers。
或者在form.Closing事件中調用它們各自的join()方法。
這將讓應用程序等待直到線程完成。

+0

我還沒有實施BackGroundWorkers。我只使用簡單的線程。 而我無法調用它們的join()方法。因爲線程在另一個側面類別中。並且類的對象在方法中被實例化。因此,無法從窗體關閉事件訪問這些對象。任何其他方式? –

+0

它會幫助,如果你可以發佈一些代碼,這樣就可以更準確地回答;) – AssaultingCuccos

+0

對不起,但它是不可能的總結它。 –

相關問題