我有一個Windows窗體。點擊「確定」後,將完成一些需要一些時間的工作。在此過程中,表單的所有控件都被禁用,因此用戶無法執行某些操作。除了一個按鈕,中止。該按鈕仍可用於中止處理任務。 我開始一個新的主題,很好。問題是,當單擊ob中止時,在線程完成後調用該事件。C#窗體窗體線程:我的窗體似乎不作爲自己的線程運行
繼承人,他的代碼來啓動線程(我buttonOk_Click Eventmethod內)(我使用的優先級假裝的,而我做一些數據庫操作beeing中止的線程):
t1 = new System.Threading.Thread(processing);
t1.Priority = System.Threading.ThreadPriority.Normal;
t1.Start();
繼承人的代碼,其中我抓住了中止事件,但在線程正在工作期間沒有被訪問。 (Withing ButtonAbort_Click-Method)
while (t1.Priority == System.Threading.ThreadPriority.Highest)
{
System.Threading.Thread.Sleep(1000);
}
try
{
lock (t1)
{
if (t1.ThreadState != System.Threading.ThreadState.Aborted)
{
//abort Thread
t1.Abort();
//wait that lock is not released to early
while (t1.ThreadState != System.Threading.ThreadState.Aborted) { }
}
}
}
希望你能幫助我。謝謝。
這是你在那裏的一些非常奇怪的代碼。什麼是優先檢查? – Tudor 2012-03-27 09:32:58
不要做thread.abort()它會搞砸了。使用一個標誌並在線程中檢查這個標誌,讓它自行停止。 – RvdK 2012-03-27 10:21:48