我是WPF的新手,在我读过的每个教程中,他们要么将一个[System.STAThread]属性应用于他们的Main方法,要么告诉读者这样做.
这个属性真的"需要"吗?如果是这样,为什么?
Mah*_*dsi 33
这是Windows要求而不是WPF要求,并且可以追溯到.NET之前的Windows窗体和控件的原始设计.
STAThread是指"单线程公寓",它指的是当前(主要)线程使用的线程模型.使用中的线程模型决定了其他.NET和COM应用程序如何与您的应用程序(以及其本身的线程)进行通信.单线程应用程序模型要求一次没有单个对象"存在"多个STA线程,这与MTA线程模型相反; 并允许仅通过编组作为对象将指针传递到公寓之间的数据.
基本上,使用[STAThread]声明,其他应用程序将在发送数据时知道您的线程策略是什么.STA模型是Windows线程/应用程序最常用的线程模型; 但是,如果从STA建模的线程调用,您有时会遇到某些代码无法运行,因为它的设计是以不符合STA限制的方式跨线程边界发送/接收数据.事先了解给定线程的公寓模型允许IDE在编译时捕获这些异常,而不是在运行时尝试跨线程边界使用对象时获取令人讨厌的访问冲突错误.
您可以从以下MSDN文章中了解STA和MTA线程:http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx
请注意,即使是普通的.NET应用程序(从WPF之前)也需要main()顶部的[STAThread]声明.
在这个博客条目中有一个很好的答案。
引自博客:
当
STAThreadAttribute施用时,其更改当前线程的单元状态为单螺纹。无需深入讨论 COM 和线程,此属性可确保当前线程与可能希望通过 COM 与之对话的其他线程之间的通信机制。当您使用 Windows 窗体时,根据您使用的功能,它可能会使用 COM 互操作来与操作系统组件进行通信。这方面的好例子是剪贴板和文件对话框。MTA 或自由线程单元不支持 Windows 窗体。使用 Windows 窗体的应用程序应始终声明它们正在使用的单元样式,因为某些其他组件可能会不正确地初始化线程的单元状态。
| 归档时间: |
|
| 查看次数: |
20886 次 |
| 最近记录: |