Windows Presentation Foundation (WPF) 旨在帮助开发人员解决线程的难题。这样,大多数 WPF 开发人员都不必编写使用多个线程的接口。由于多线程程序很复杂,且难以调试,因此只要存在单线程解决方案,就应避免使用多个线程。
但是,无论体系结构多么完善,没有任何 UI 框架能够为每一类问题提供单线程解决方案。WPF 接近这一理想,但是在某些情况下,仍然可通过采用多个线程来提高用户界面 (UI) 响应速度或应用程序性能。在讨论一些背景材料后,本文将探讨其中一些情况,最后从较低层次进行一些详细讨论。
本主题包括下列各节:
- 概述和调度程序
- 操作中的线程:示例
- 技术细节和难点
- 相关主题
概述和调度程序
通常,WPF 应用程序从两个线程开始:一个用于处理呈现,一个用于管理 UI。呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。大多数应用程序都使用一个 UI 线程,但在某些情况下,最好使用多个线程。我们将在后面举例说明这一点。
UI 线程在一个名为
要构建响应速度快、且用户友好的应用程序,诀窍是减小工作项,以最大限度地提高
那么,WPF 应用程序应如何处理大型操作? 如果您的代码涉及大型计算,或者需要查询某台远程服务器上的数据库,应怎么办? 通常的办法是在单独的线程中处理大型操作,而专门让 UI 线程来处理
一直以来,Windows 只允许创建 UI 元素的线程访问这些元素。这意味着负责一些长时间运行任务的后台线程无法更新已完成的文本框。Windows 这样做是为了确保 UI 组件的完整性。如果列表框的内容在绘制过程中被后台线程更新,那么该列表框看上去将会很奇怪。
WPF 使用一种内置互斥机制来强制执行这种协调。WPF 中的大多数类都派生自
如果只有一个线程可以修改 UI,那么后台线程如何与用户交互? 后台线程可以请求 UI 线程代表它执行操作,这是通过向 UI 线程的
If you believe an article violates your rights or the rights of others, please contact us.

