我有這樣的代碼,這似乎很直接,但AutoResetEvent永遠不會得到信號。似乎沒有任何東西從Web服務返回,並且WaitAll在十秒後才超時。一切正常,沒有線程jiggerypokery,所以它不是一個Web服務問題。我究竟做錯了什麼?我的AutoResetEvent代碼有什麼問題?
AutoResetEvent[] autoEvents;
ObservableCollection<Tx3.ResourceService.ResourceTime> resourceTime;
ObservableCollection<Tx3.ResourceService.ResourceTimeDetail> resourceTimeDetail;
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
autoEvents = new AutoResetEvent[]
{
new AutoResetEvent(false),
new AutoResetEvent(false),
};
var resourceService = getResourceServiceClient();
// Get ResourceTime data for this user
resourceService.ListResourceTimeAsync(CategoryWorkItemId, ResourceId);
resourceService.ListResourceTimeCompleted += new EventHandler<Tx3.ResourceService.ListResourceTimeCompletedEventArgs>(resourceService_ListResourceTimeCompleted);
// Get ResourceTimeDetails
resourceService.ListResourceTimeDetailAsync(CategoryWorkItemId, ResourceId);
resourceService.ListResourceTimeDetailCompleted += new EventHandler<ListResourceTimeDetailCompletedEventArgs>(resourceService_ListResourceTimeDetailCompleted);
WaitHandle.WaitAll(autoEvents, 10000);
System.Diagnostics.Debug.WriteLine("do something with both datasets");
}
void resourceService_ListResourceTimeCompleted(object sender, Tx3.ResourceService.ListResourceTimeCompletedEventArgs e)
{
resourceTime = e.Result;
autoEvents[0].Set();
}
void resourceService_ListResourceTimeDetailCompleted(object sender, ListResourceTimeDetailCompletedEventArgs e)
{
resourceTimeDetail = e.Result;
autoEvents[1].Set();
}
多麼傻的香腸(!)讓我們假設我已經用正確的方式編寫了處理程序。 – Paul 2009-11-17 16:34:00
好吧,我試着糾正處理程序...同樣的問題。 – Paul 2009-11-17 16:34:59
如果這是一個Web服務,你應該可以裝配Wireshark並驗證它是否正常工作;你能證實答覆回來了嗎?如果是,請嘗試在回調方法中設置斷點並查看是否在該處設置斷點。基本上只是試圖檢查你可以一路走過的每一步,直到你看到它分崩離析。 – qid 2009-11-17 17:48:31