[C#][Windows Form][ADO.NET 3.5] 非同步資料存取(三) (WaitHandle)

  • 3482
  • 0

[C#][Windows Form][ADO.NET 3.5] 非同步資料存取(三) WaitHandle

Introduction

一樣是利用 IAsyncResult 物件的 AsyncWaitHandle 屬性來取得一個 WaitHandle,並且判斷該 WaitHandle 是否有收到作業完成的信號。

 

Examples

 


//....
  SqlCommand myCommand1 = new SqlCommand(myQuery1, myConnection1);
  IAsyncResult myResult1 = myCommand1.BeginExecuteReader();
  WaitHandle myWaitHandle1 = myResult1.AsyncWaitHandle;

  // 將等候控制代碼新增至 WaitHandle 陣列中
  WaitHandle[] myWaitHandles = new WaitHandle[]{myWaitHandle1};
  
  //等後 5 秒 是否會WaitHandle 傳回信號,這邊的回傳值是陣列的元素的 Index
  //比方說 myWaitHandle1位於陣列的第一個元素所以若是在5秒內完成作業,
  //就會回傳 0 的值,若回傳的不是這個值,也可能是其他值 (WaitHandle.WaitTimeout 此為逾時常數)
  //是需要判斷的
  index = WaitHandle.WaitAny(myWaitHandles, 5000, false);

//.... 
  switch(index)
  {
       case 0 :
       //結束非同步作業
       using(SqlDataReader myReader1 = myCommand1.EndExecuteReader(myResult1)){
       	//.......
	//.......
       }
   }

 

Refrence

WaitHandle 類別

WaitHandle.WaitAny

WaitHandle.WaitAll

同步處理原始物件概觀

三小俠  小弟獻醜,歡迎指教