如何在不阻塞UI线程的情况下按顺序调用多个WCF方法?

时间:2012-12-11 16:54:31

标签: c# wcf asynchronous synchronization

我必须按顺序调用多个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.
}

我该怎么做?

3 个答案:

答案 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!