调度程序线程如何在wpf UI控件中工作?调度程序线程如何在wpf UI控件中工作
回答
编辑。
如果您有一个长时间运行的任务,请使用BackGroundWorker将其委托给后台线程,然后您将不需要使用调度程序将消息传递回UI。 This is a very good article.
它是一个非常宽泛的问题。我建议你从WPF Architecture开始。
在WPF中的大部分对象由 DispatcherObject的,它提供了 基本构造为处理 并发线程和派生。基于由调度员实现的消息系统 ,WPF是 。这个 的工作方式非常类似于熟悉的Win32 消息泵;实际上,WPF 调度程序使用User32消息执行交叉线程调用 。
实际上有两个核心概念,以 在WPF讨论并发 当明白 - 调度和线程 亲和力。
在WPF的设计阶段, 目标是移动到 执行一个线程,而是一个非线程 “affinitized”的模式。线程亲和力 发生在组件使用执行线程的 身份到 时存储某种类型的状态。最常见的 这种常见形式是使用 线程本地存储(TLS)来存储 状态。线程亲和力要求每个逻辑执行线程 仅由 中的一个物理线程拥有,该操作系统可能会变为 内存密集型。最后,WPF的 线程模型与 保持同步,现有的User32线程模型 单线程执行与线程 亲和力。此 的主要原因是互操作性 - OLE 2.0,剪贴板和Internet Explorer等系统都需要单线程 亲和性(STA)执行。
既然你有STA线程 对象,你需要一种方法来 线程之间的沟通, 验证你是正确的 线程。这里就是 调度员的角色。调度员是一个基本的 消息调度系统,其中 多个优先队列。消息的示例 包括原始输入 通知(鼠标移动),框架 函数(布局)或用户命令 (执行此方法)。通过从DispatcherObject派生 ,您将创建一个具有STA行为的 CLR对象,并且 将在创建时获得指向 调度员的指针。
嗯..我怀疑是当一个长时间运行的过程发生在用户界面后面,那时候WPF UI将不会响应或使用调度程序线程它可以解决吗? – 2009-09-04 10:35:19
- 1. 如何使用wpf调度程序创建多UI线程winforms应用程序
- 2. 调度程序线程和UI呈现WPF窗体处于最小化状态时的线程工作
- 3. WPF ObservableList调度程序线程
- 4. wpf线程,backgroundworker,调度程序
- 5. WPF调度程序/线程问题
- 6. C#WPF从工作线程更新UI
- 7. Akka调度程序:akka调度程序如何工作?
- 8. 作业调度程序UI小部件?
- 9. 如何在工作线程中从UI线程获取变量?
- 10. Android中的UI线程如何工作?
- 11. 从工作线程调用更新UI线程是如何工作的?
- 12. 如何在工作线程中调用UI线程上的方法?
- 13. 我可以更改WPF中控件的线程相关性(调度程序)吗?
- 14. 如何获取UI线程调度程序?
- 15. 如何从其他appdomain获取UI线程调度程序?
- 16. 调度程序到WPF中的线程关系
- 17. 线程调度程序在WPF中睡眠
- 18. 如何从工作线程更新UI线程中的视图
- 19. 如何从线程更新WPF应用程序中的UI?
- 20. 使用工作线程和UI线程
- 21. C#线程调度程序
- 22. 在控制台应用程序中调度C#线程
- 23. WPF中的多线程UI
- 24. 从工作线程调用UI线程时发生死锁
- 25. 切换到WPF中的调度程序线程
- 26. 使用调度程序加载WPF中的用户控件
- 27. 进程调度程序和线程调度程序
- 28. WPF调度程序操作泄漏
- 29. 如何从UI线程访问工作线程?
- 30. 如何在Nunit中调用WPF调度程序?
请评论投票下来。 – 2009-09-04 10:30:48
请在你的问题上更精确一点。 – 2009-09-04 10:47:57