首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight对wcf的同步调用

Silverlight对wcf的同步调用
EN

Stack Overflow用户
提问于 2010-06-18 16:49:54
回答 2查看 2.7K关注 0票数 1

我在试着同步通话。但silverlight应用程序在调用endList方法时会锁定自身。在一个简单的控制台应用程序中,我可以使异步同步。看不到问题。

代码语言:javascript
复制
  var svc = new WcfServiceClient();
  var ar = svc.BeginList(null, null);
  var result = svc.EndList(ar); <-- Silverlight hangs here
  listBox.ItemsSource = result;
EN

回答 2

Stack Overflow用户

发布于 2010-06-18 17:06:19

Silverlight不支持同步调用。

Here是一篇关于同步调用and服务和解决方法的文章。

票数 2
EN

Stack Overflow用户

发布于 2010-06-18 17:21:06

简而言之:如果您不在Dispatcher线程上,您可以这样做,例如:

代码语言:javascript
复制
System.Threading.ThreadPool.QueueUserWorkItem(state =>
    {
        IAsyncResult asyncResult = svc.BeginSomething(null, null);

        if (!asyncResult.CompletedSynchronously)
        {
            asyncResult.AsyncWaitHandle.WaitOne();
        }

        try
        {
            svc.EndSomething(asyncResult);
        }
        catch
        {
            throw;
        }
        finally
        {
            asyncResult.AsyncWaitHandle.Close();
        }
    });

这样做的最大好处是你可以像过去一样同步地保持你的域模型层,你可以很容易地实现延迟加载等。

但是在实践中,您只能在将应用程序设计为严格遵循MVVM /命令模式时使用它,在这种模式中,ViewModels和命令处理调度线程和模型线程之间的切换。它有很多基础工作要做,也有一些陷阱,但当它工作时,它工作得很好。

如果你想使用工作方式类似的现成框架,可以在这里找到:CodeProject: Introducing the Model Thread View Thread Pattern。架构在该页面上也有很好的解释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3068266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档