我是 Web 服务的新手,从 WCF 开始。我有多个 Web 服务调用,每个调用都是异步完成的。但我的问题是,主线程应该停止,直到所有 Web 服务调用都返回,并且当所有 Web 服务调用都返回时,它才应该继续。
我在这里尝试了两件事:
使用布尔变量和无限循环来停止主线程。我更改了
Completed
Web 服务调用方法中的值。它导致了一个无限循环,并且Completed
从未被调用。我从主线程进行了 Web 服务调用,在进行了 Web 服务调用之后,我在主线程上调用了 Join 方法来停止该线程,直到 Web 服务返回。
这是代码片段:
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 服务调用是在静态构造函数中进行的,以便获取数据只需一次,并多次操作和显示。
但是发生的情况是主线程在获取数据并继续执行操作之前不会停止,我得到一个空异常。
请为我提出一条出路,以及为什么上述方法不起作用。
提前感谢您对此提供的任何帮助。