我必须按顺序调用多个WCF方法而不阻塞UI线程。
每个方法都必须在调用下一个方法之前完成。
我已经使用svcutil设置了我的WCF服务,因此我可以使用同步方法的异步版本。
如果我调用异步版本,方法将同时执行,我想避免。
如果我调用同步版本,则会阻止UI线程,因此我的UI没有响应,我想避免这种情况。
如何在不阻止UI线程的情况下调用异步版本并等待每次调用在下次调用之前完成?
假设我必须为每个要通过WCF方法处理的对象循环:
foreach (MyObject obj in SomeCollection)
{
myWCFProxy.TreatObject(obj); // This is a duplex service and I am handling its callback in a separate method.
// I would like to wait here (without blocking the UI thread) until the method returns.
}
我该怎么做?
答案 0 :(得分:2)
难道你不能在异步方法中包装一系列同步WCF调用吗?这使得代码不会在UI线程上执行,而是以线性方式执行WCF调用。
另一种选择是在前一个WCF方法的回调中调用后续WCF方法。
答案 1 :(得分:1)
根据您的描述,最简单的解决方案可能是使用BackgroundWorker同步执行WCF调用。
答案 2 :(得分:0)
如果是一个选项,我建议修改WCF服务,立即采用多个MyObject
并根据需要处理它们。然后客户端上的代码变为:
myWCFProxy.TreatObjects(SomeCollection); //be sure to handle the callback
在WCF方面:
foreach (var obj in SomeCollection)
TreatObject(obj); //it's synchronous, so it waits!