我有一個單線程,它有一個運行線程用於從服務器獲取記錄。 但是,當我停止我的winform應用程序線程繼續運行。我試圖在單例中創建一個析構函數來中止該線程(如果它正在運行),但它對線程沒有任何影響 - 我知道析構函數正在被喚起。當我的winform應用程序關閉時,我該如何停止線程
我正在尋找關於如何在應用程序關閉時關閉線程的建議。 感謝
C#,.NET2
我有一個單線程,它有一個運行線程用於從服務器獲取記錄。 但是,當我停止我的winform應用程序線程繼續運行。我試圖在單例中創建一個析構函數來中止該線程(如果它正在運行),但它對線程沒有任何影響 - 我知道析構函數正在被喚起。當我的winform應用程序關閉時,我該如何停止線程
我正在尋找關於如何在應用程序關閉時關閉線程的建議。 感謝
C#,.NET2
最好的選擇,如果可能的話在你的應用程序,是合作取消。
線程在沒有更多代碼執行時自動停止。所以,當用戶關閉你的應用程序時,你設置了一個標誌,表明你的線程應該停止。線程需要不時檢查標誌是否設置,如果是,則停止從服務器獲取記錄並返回。
否則,你可以推出自己的解決方案,例如
static bool isCancellationRequested = false;
static object gate = new object();
// request cancellation
lock (gate)
{
isCancellationRequested = true;
}
// thread
for (int i = 0; i < 100000; i++)
{
// simulating work
Thread.SpinWait(5000000);
lock (gate)
{
if (isCancellationRequested)
{
// perform cleanup if necessary
//...
// terminate the operation
break;
}
}
}
一個線程可以是:
當您創建一個線程時,默認情況下它是一個前臺線程。
你可以改變這樣的:
Thread t = new Thread(myAction);
t.IsBackground = true;
t.Start();
的
當窗體關閉時後臺線程是否結束?例如,假設我有多個表單,並且在一種表單中有一個線程。當表單關閉時,即使線程處於無限循環,線程也會終止嗎?或者當應用程序退出時(當Main完成處理時)該線程結束? – JT9 2015-10-28 14:56:41
@ JT9我剛剛測試過它,後臺線程不會在多表單應用程序中關閉表單時結束。 – tunafish24 2016-07-14 08:24:54
可能重複[?如何停止的BackgroundWorker在窗體的Closing事件(http://stackoverflow.com/questions/1731384/how-to-stop- backgroundworker-on-forms-closing-event) – 2010-08-22 15:43:17
我看着你的鏈接消化...它沒有爲我做一件事 – fishhead 2010-08-22 15:46:14