0

我必须在不阻塞 UI 线程的情况下依次调用多个 WCF 方法。

每个方法都必须在调用下一个方法之前完成。

我已经使用 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.
}

我怎样才能做到这一点 ?

4

3 回答 3

2

您不能在异步方法中包装一系列同步 WCF 调用吗?这可以防止代码在您的 UI 线程上执行,但以线性方式执行您的 WCF 调用。

另一种选择是在前一个 WCF 方法的回调中调用后续 WCF 方法。

于 2012-12-11T17:16:12.333 回答
1

根据您的描述,最简单的解决方案可能是使用BackgroundWorker同步执行 WCF 调用。

于 2012-12-11T18:07:36.567 回答
0

如果可以选择,我建议修改 WCF 服务以MyObject一次获取多个 s 并根据需要处理它们。然后您在客户端上的代码变为:

myWCFProxy.TreatObjects(SomeCollection); //be sure to handle the callback

在 WCF 方面:

foreach (var obj in SomeCollection)
    TreatObject(obj); //it's synchronous, so it waits!
于 2012-12-11T18:30:41.883 回答