有时我需要在 Silverlight 中调用 WCF 服务并阻止 UI 直到它返回。当然,我可以分三步完成:
- 设置处理程序和阻止 UI
- 呼叫服务
- 完成所有操作后取消阻止 UI。
但是,我想将 DoSomethingSync 方法添加到服务客户端类,并在需要时调用它。
是否可以?有没有人真正实现过这样的方法?
更新: 看起来答案是根本不使用同步调用。将为异步调用寻找一些易于使用的模式。查看这篇文章(取自评论)了解更多信息。
有时我需要在 Silverlight 中调用 WCF 服务并阻止 UI 直到它返回。当然,我可以分三步完成:
但是,我想将 DoSomethingSync 方法添加到服务客户端类,并在需要时调用它。
是否可以?有没有人真正实现过这样的方法?
更新: 看起来答案是根本不使用同步调用。将为异步调用寻找一些易于使用的模式。查看这篇文章(取自评论)了解更多信息。
这就是重点;您不应该在 Silverlight 中同步 IO。别打了!反而:
碰巧的是,我正在积极研究使异步模式更容易接近的方法(特别是考虑到 Silverlight)。这是第一次刺伤,但我有更好的东西;-p
我不同意 Marc 的观点,在某些情况下您需要进行同步 Web 服务调用。但是,您可能应该避免的是阻塞 UI 线程,因为这会造成非常糟糕的用户体验。
同步实现服务调用的一种非常简单的方法是使用 ManualResetEvent。
ManualResetEvent m_svcMRE = new ManualResetEvent(false);
MyServiceClient m_svcProxy = new MyServiceClient(binding, address);
m_svcProxy.DoSomethingCompleted += (sender, args) => { m_svcMRE.Set(); };
public void DoSomething()
{
m_svcMRE.Reset();
m_svcProxy.DoSomething();
m_svcMRE.WaitOne();
}
这是一个让您在 SL 中同步调用 WCF 服务的类:http: //johnleitch.blogspot.com/2010/03/easy-way-to-synchronously-call-wcf.html
Using SL4 building business application itself a wrong approach. I am facing problem with async call in SL4 client. Not only this issue. Once you go for a 15mins beeak after login SL application, after break you SL app can not retain all data at all. Its happen sometimes very frequently.