什么线程在silverlight WCF调用上调用已完成的事件处理程序?

And*_*bel 5 .net c# silverlight wcf multithreading

假设我有Silverlight应用程序调用WCF服务:

void DoStuff()
{
    MyProxy proxy = new MyProxy();
    proxy.DoStuffCompleted += DoStuffCompleted;
    proxy.DoStuffAsync();
}

void DoStuffCompleted(object sender, DoStuffCompletedEventArgs e)
{
    // Handle the result.
}
Run Code Online (Sandbox Code Playgroud)

DoStuff由UI线程调用.什么线程最终会调用该DoStuffCompleted方法?如果我同时调用两个异步调用,是否有可能在不同的线程上同时触发两个已完成的事件?

Aar*_*ark 4

回调将在主线程上调用。多个响应不会同时发生。响应事件的顺序可能是意外的。您可能想要使用接受“用户状态”对象的 proxy.DoStuffAsync 重载:

proxy.DoStuffAsync(object userState)

这将允许您为每个呼叫发送唯一的内容,以便您可以区分您正在处理的响应。请记住,如果 WCF 调用返回错误,则没有返回值 - 因此 userState 可能是了解哪个调用失败的唯一方法(如果很重要)。

更新:

找到了一些关于如何使其使用另一个线程的更多信息(关于SO):

Silverlight Web 服务回调性能请点击Tomek博客的链接获取更多信息。