在非UI线程上运行RIA服务

时间:2012-08-15 13:24:59

标签: multithreading silverlight backgroundworker wcf-ria-services

我正在尝试从非UI线程进行RIA服务调用 我通过打开新线程和后台工作程序进行了调用,但是对于这两种情况,回调都在UI线程上运行 是否可以在调用者线程上执行回调,而不是UI?
感谢

1 个答案:

答案 0 :(得分:5)

<强> TL;博士

  • 使用WCF
  • 自己将结果编组到UI线程

WCF RIA是为了在UI线程上工作而构建的

WCF RIA主要用于UI线程。这显然有很多优点和缺点;在你的情况下大多是利弊我无法找到这个设计的权威文档,但是,通过肯定UI线程来回答关于该主题的大多数问题。

  

域上下文加载和SubmitChanges异步执行。他们从线程池中获取一个线程,对服务器进行必要的调用,当这些调用完成后,工作会自动编组回UI线程以修改实体集合,然后更新UI(可能通过INotificationChanged)。 p>

如果您使用WCF获取自己的数据,则可以在您喜欢的任何线程上执行此操作。调用完成后,您必须编写(或借用)代码以更新UI线程上的UI以避免cross thread exceptions

IMO,WCF RIA的主要优点是提供简单问题的简单解决方案:

  • 在服务器和客户端之间重用代码的出色工具
  • 服务和客户端代码始终兼容
  • 向/从客户端/服务器传输数据相对简单
  • WCF RIA强烈反对,导致易于学习的编码模式

缺点是难以或不可能出现难题:

  • WCF RIA是strongly opinionated并且不遵循该意见是痛苦的或不可能的
  • 所有操作都在UI线程上返回,经常导致性能问题
  • 有一些伏都教可以实现最大量的客户端+服务器代码重用