【发布时间】:2012-05-06 10:40:46
【问题描述】:
我是 Web 服务的新手,刚开始使用 WCF。我有多个 Web 服务调用,每个调用都是异步完成的。但我的问题是,主线程应该停止,直到所有 Web 服务调用都返回,并且当所有 Web 服务调用都返回时,它才应该继续。
我在这里尝试了两件事:
使用布尔变量和无限循环来停止主线程。我更改了 Web 服务调用的
Completed方法中的值。它导致了一个无限循环,Completed从未被调用过。我从主线程调用了Web服务,调用完Web服务后,我在主线程上调用Join方法来停止这个线程,直到Web服务返回。
这是代码sn-p:
ServerMonitoringBoardDataService.ServerMonitoringBoardDataServiceClient c = new ServerMonitoringBoardDataService.ServerMonitoringBoardDataServiceClient();
c.GetEnvironmentAndServersCompleted += new EventHandler<ServerMonitoringBoardDataService.GetEnvironmentAndServersCompletedEventArgs>(c_GetEnvironmentAndServersCompleted);
c.GetEnvironmentAndServersAsync();
void c_GetEnvironmentAndServersCompleted(object sender, ServerMonitoringBoardDataService.GetEnvironmentAndServersCompletedEventArgs e)
{
var x = e.Result;
}
我遇到问题的原因是,多个 Web 服务调用以列表形式返回数据,我对该数据进行了一些操作,然后将其显示在 UI 上。Web 服务调用是在静态构造函数中进行的,所以就像只获取一次数据并多次操作和显示它。
但是发生的情况是主线程在获取数据并开始执行操作之前不会停止,我得到一个空异常。
请为我提出一条出路,以及为什么上述方法不起作用。
在此先感谢您提供任何形式的帮助。
【问题讨论】:
-
我还尝试将 Web 服务调用放入“任务”中,并在调用 Web 服务后调用了 Task.WaitAll() 方法。但这也不起作用。
-
对不起,我会在这里检查我以前的所有问题并标记适当的答案,但现在请帮助我解决上述问题。
标签: c# .net wcf web-services