我已經開始了多線程中的特殊課程,但我有一些基本問題需要解決。說我有一個線程創建線程和阻止UI的用法
Thread t1 = new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
IsCancel = false;
this.workProj.DoWorkWithRefSync(ref IsCancel);
});
t1.Start();
其次
while(t1.IsAlive)
{
}
或
t1.Join();
或
myAutoResetEvent.WaitOne(); // myAutoResetEvent.Set() called in thread when it finished processing
我不知道,但是,這可能不是一個很好的例子但期待一個。 我知道它們都是來自後臺線程的某種形式的信號,以通知調用/ UI線程該工作已完成。 但是使用它們最終會阻塞UI,直到線程完成。所以我想知道這個實際生活場景的實現。 我在想爲什麼不直接在UI線程上運行這個過程,因爲你不介意阻塞它。 編輯:換句話說,我正在尋找這些阻擋元素的真正用途,如thread.Join()等
在C#5.0,你會使用異步/ AWAIT,C#4.0中,您會使用任務與延續,在它之前,你會使用背景工人或某個線程或線程池異步通知類型不同步等待。 –
通常,使用線程在UI應用程序中運行後臺任務,然後在任務完成時阻塞UI線程是非常糟糕的主意*。你沒有抽出消息,應用程序變得沒有反應。你可以在'while(alive)'塊中用'Application.DoEvents()'來破解它,但是這會產生比解決問題更多的問題。通常,在任何UI應用程序中,主UI線程都應該具有響應能力並且能夠隨時抽出消息。 – Baldrick
t1.Join()是一個阻塞呼叫。它實際上等待線程t1開始的前一個調用完成。 – rajibdotnet