4

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

回答

5

TL;博士

  • 使用WCF
  • 元帅你的结果到UI线程自己

WCF RIA是建立在做UI线程工作

WCF RIA的设计主要在UI线程上工作。这显然有许多利弊。主要是对你的情况。我很难找到这个设计的明确文档,但是,关于这个主题的大部分问题都是通过确认UI线程来解答的。

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

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

IMO的WCF RIA给予简单的问题,简单的解决方案的主要优点:

  • 服务器和客户端之间采用重码大工装
  • 服务和客户端代码总是兼容
  • 转移数据往/从客户端/服务器是相对简单的
  • WCF RIA强烈地认为导致易于学习的编码模式

利弊做出艰难的问题,很难或不可能:

  • WCF RIA为strongly opinionated,而不是下面这种观点是痛苦或不可能
  • 所有操作返回UI线程上,往往造成性能问题
  • 有是一些伏都教实现客户端+服务器代码的最高金额重用
+0

感谢您的详细解答。不幸的是,我不能使用WCF,因为我在使用RIA的项目上工作,而且我无法更改该部分,唯一的办法就是使用RIA – 2012-08-15 19:11:14

+0

我已经通过较少的服务器调用获得了更好的性能。对于一次通话,您看到的延迟随着每次连续通话都呈线性增长。如果你有很多数据,你可以尝试分页。祝你好运! – 2012-08-15 19:24:58

+0

我正在绘制类似building的模式,并按chunk加载数据块,所以我最大限度地减少了数据接收延迟,问题在于数据处理部分,数据接收之间的时间间隔(我正在使用fiddler获取该时间)和完成的事件射击。 – 2012-08-15 19:27:50