關鍵字:WinCE .NET
在WinCE或者Windows Moblie開發中常常把大量的批處理工作提交給工作進程(Worker Thread)進行,當批處理工作完成時,或者該進程發生失敗以及異常的時候需要通知界面進程(UI Thread)進行同步。(PS:有時候同步的是兩個worker thread,而不是UI Thread,這由具體應用來決定。)這時候往往需要等待事件。。NET Framework 提供的等待事件封裝在System.Threading.WaitHandle里面。但是。NET Compact Framework下的WaitHandle不能提供。NET Framework所有的功能,在等待時間里只是提供了WaitOne功能(只能等待一個Event)。其實在一般的應用,UI進程往往等待一個事件就夠了,下面演示WaitOne的使用。
由于WaitHandle是一個抽象類(abstract class),所以例子使用其sub-class AutoResetEvent .
定義field,父線程和子線程都需要訪問到
private static AutoResetEvent autoEvent = new AutoResetEvent(false);
public bool Connect()
{
//Do sth. eg make connections.
ThreadPool.QueueUserWorkItem(
new WaitCallback(CheckConnection), null);
// Wait for work method to signal.
if (autoEvent.WaitOne(5000, false))
{
return true;
}
else
{
return false;
}
}
private void CheckConnection(Object stateInfo)
{
while(true)
{
if (CheckConnection())
{
// Signal that work is finished.
autoEvent.Set();
}
}
}
原文轉自:http://www.anti-gravitydesign.com