天天看點

.NET Compact Framework 多線程下的等待事件

在WinCE或者Windows Moblie開發中常常把大量的批處理工作送出給工作程序(Worker Thread)進行,當批處理工作完成時,或者該程序發生失敗以及異常的時候需要通知界面程序(UI Thread)進行同步。(PS:有時候同步的是兩個worker thread,而不是UI Thread,這由具體應用來決定。)這時候往往需要等待事件。

.NET Compact Framework 多線程下的等待事件

//定義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();

    }

.NET Compact Framework 多線程下的等待事件

定義一個AutoResetEvent 的對象,在父程序和子程序都會使用到。WaitOne()用在父程序裡,第一個參數為等待時間,如果為-1表示一直等待不傳回。

Set()用在子線程,當批處理完成後可以調用Set()來通知父程序。

WaitHandle應用廣泛,例如可以應用在服務程式偵聽資料來源,當有資料時進行處理,沒有的時候等待timeout時間,處理regular的事情。這樣還起到sleep的作用。

.NET Compact Framework 多線程下的等待事件

while(true)

    if (autoEvent.WaitOne(5000, false))

        ProcReques();

    else

        ProcRegularTask();

.NET Compact Framework 多線程下的等待事件

參考文獻

<a target="_blank" href="http://msdn.microsoft.com/en-us/library/kzy257t0.aspx">.NET Framework WaitHandle Members</a>

    本文轉自Jake Lin部落格園部落格,原文連結:http://www.cnblogs.com/procoder/archive/2009/01/19/1378013.html,如需轉載請自行聯系原作者

繼續閱讀