multithreading - 在非 UI 线程上运行 RIA 服务

标签 multithreading silverlight backgroundworker wcf-ria-services

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

最佳答案

tl;博士

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

  • WCF RIA 旨在处理 UI 线程

    WCF RIA 旨在主要在 UI 线程上工作。这显然有很多优点和缺点。在你的情况下主要是缺点。我很难找到有关此设计的明确文档,但是,通过确认 UI 线程化来回答有关该主题的大多数问题。
  • Here is a post来自 WCF RIA QA 团队的一名成员,表明仅 UI 线程处理。
  • 安迪法语 describes the callbacks marshalling to the UI thread :

  • The Domain Context Load and SubmitChanges execute asynchronously. They take a thread from the thread pool, make the necessary calls to the server, and when those calls complete the work is automatically marshalled back to the UI thread to modify the entity collections and subsequently update the UI (probably via INotificationChanged).



    如果您使用 WCF 获取自己的数据,则可以在您喜欢的任何线程上进行。调用完成后,您将不得不编写(或借用)代码来更新 UI 线程上的 UI 以避免 cross thread exceptions .

    IMO,WCF RIA 的主要优点提供简单的问题简单的解决方案:
  • 在服务器和客户端之间重用代码的好工具
  • 服务和客户端代码始终兼容
  • 向/从客户端/服务器传输数据相对简单
  • WCF RIA 非常固执,导致易于学习的编码模式

  • 缺点使难题变得困难或不可能:
  • WCF RIA 是 strongly opinionated不遵循该意见是痛苦的或不可能的
  • 所有操作都返回UI线程,经常导致性能问题
  • 有一些巫术可以实现最大量的客户端+服务器代码重用
  • 关于multithreading - 在非 UI 线程上运行 RIA 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970092/

    相关文章:

    visual-studio - 如何在不终止解决方案的情况下重命名项目

    c# - 首次启动应用程序时消息提示崩溃

    c# - C#中的进度条和backgroundworker

    c# - 如何使用 backgroundworker 更新 GUI?

    c - OpenMP - 在包含并行 for 循环的并行区域中串行化 for 循环

    c# - 我的类(class)在序列化过程中丢失了方法

    Java并行编程

    wpf - 使用 BackgroundWorker 更新 GUI

    java - 两个线程查询一个表

    c++ - 仅在多核上运行时出现段错误