[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
三小俠 小弟獻醜,歡迎指教