我有这样的代码,这似乎很直接,但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