線程的等待時可以用這個,不論是線程池還是線程都可以用這個做等待。 當然也可以用迴圈待等的執行的方式進行線程待等 ...
線程的等待時可以用這個,不論是線程池還是線程都可以用這個做等待。
ManualResetEvent md=new ManualResetEvent(false);//這個false 設置線程等待, true 允許線程不待等
IAsyncResult result= new Action<string>((t) =>
{
Console.WriteLine(t);
mre.Set();//允許線程不用繼續等待,可以執行下去
}).BeginInvoke("你好",null,null);
mre.WaitOne();//主線程被卡在這裡,等待信號量變成true(mre.Set()這個方法後就可變為true不用等待)
Console.WriteLine("你吃飯了麽!");
mre.Reset();//重新設為線程等待
IAsyncResult result01= new Action<string>((t) =>
{
Console.WriteLine(t);
mre.Set();//設置線程不用繼續等待,可以執行下去
}).BeginInvoke("還沒吃",null,null);
mre.WaitOne();//又被阻塞了
Console.WriteLine("一起吃飯吧!");
//輸出結果
你好
你吃飯了麽!
還沒吃
一起吃飯吧!
//線程池中的使用
mre.Reset();
ThreadPool.QueueUserWorkItem((t) =>
{
Console.WriteLine("我是從線程池中走出的線程!");
mre.Set();
});
mre.WaitOne();
當然也可以用迴圈待等的執行的方式進行線程待等
while (!result.IsCompleted)
{
Thread.Sleep(500);
Console.WriteLine("我在等你回覆!");
}
Console.WriteLine("我吃了!");