2010-06-02 93 views
0

我有一個窗口的控制線程變化的形式工作表單應用程序,如何加入線程與另一個

我實現了防止線程交叉存取invoke方法,

但是當我關閉窗體,第二個線程仍然工作,並嘗試訪問控制並拋出一個對象引用未設置爲對象的異常的實例

我怎麼能保證防止第二線程工作,如果第一個是不是活

無需人工檢查建議

在此先感謝

+0

需要更多關於如何創建線程的信息,例如使用Timer,BackgroundWorker等。此外,用戶如何通過代碼關閉表單? – AMissico 2010-06-02 15:15:25

+0

你有沒有檢查,如'如果對象不是什麼然後調用'。 – AMissico 2010-06-02 15:16:29

+0

您希望第二個線程在表單關閉後繼續執行,還是希望此線程在表單關閉時停止? – AMissico 2010-06-02 15:17:04

回答

0

此前關閉的形式,你可以通知線程,它即將被取消。例如,如果您的線程使用BackgroundWorker,則可以調用CancelAsync方法。

更新

要使用Thread類時支持這一點,你可以調用Abort - 不推薦 - 或者你可以使用一個共享變量。基本上你可以有一個線程定期檢查的布爾型isCancelled - 如果它是假的,線程返回。然後你可以從UI線程中設置這個布爾值來指示後臺線程停止。在從任一線程訪問它之前,您還需要確保正確地使用lock布爾值。

還有其他的技術可以使用 - 如果你發佈你的線程代碼,我們可以幫助你更多的。

相關問題