2

有时我需要在 Silverlight 中调用 WCF 服务并阻止 UI 直到它返回。当然,我可以分三步完成:

  1. 设置处理程序和阻止 UI
  2. 呼叫服务
  3. 完成所有操作后取消阻止 UI。

但是,我想将 DoSomethingSync 方法添加到服务客户端类,并在需要时调用它。

是否可以?有没有人真正实现过这样的方法?

更新: 看起来答案是根本不使用同步调用。将为异步调用寻找一些易于使用的模式。查看这篇文章(取自评论)了解更多信息。

4

4 回答 4

9

这就是重点;您不应该在 Silverlight 中同步 IO。别打了!反而:

  • 禁用 UI 的任何关键部分
  • 使用回调启动异步 IO
  • (...)
  • 在回调中,处理数据并更新/重新启用 UI

碰巧的是,我正在积极研究使异步模式更容易接近的方法(特别是考虑到 Silverlight)。是第一次刺伤,但我有更好的东西;-p

于 2009-03-15T08:47:34.743 回答
2

我不同意 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();
}
于 2009-03-15T09:21:30.700 回答
2

这是一个让您在 SL 中同步调用 WCF 服务的类:http: //johnleitch.blogspot.com/2010/03/easy-way-to-synchronously-call-wcf.html

于 2010-03-18T15:11:33.303 回答
-1

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.

于 2011-02-03T08:44:49.173 回答