我学习C#3.5,我想知道我们的计划做什么[STAThread]

有帮助吗?

解决方案

STAThreadAttribute基本上为Windows消息泵与COM组件进行通信的要求。虽然核心Windows窗体不使用COM,如系统对话框操作系统的许多组件确实使用这种技术。

MSDN 解释了略微的原因更详细地:

  

请将STAThreadAttribute指示   对于COM线程模型   应用程序是单线程   公寓。此属性必须   目前对任何入口点   应用程序,使用Windows窗体;   如果它被省略,在Windows   组件可能无法正常工作。   如果属性不存在,则   应用程序使用多线程   公寓的模式,这是不   支持Windows窗体。

本博客文章为什么需要STAThread?的),也说明需求相当不错。如果你想有一个更深入的视图的线程模型的工作原理在CLR水平,看的此MSDN杂志从2004年6月一文(存档,2009年4月)。

其他提示

它告诉你在单线程单元模型是编译器。这是一个邪恶的COM的东西,它通常用于Windows窗体(GUI的)作为使用的Win32为其绘制,这是为STA实现。如果你正在使用的东西,是从多个线程STA模型,然后你会得到损坏的对象。

这就是为什么你必须从另一个线程调用到GUI(如果你做任何形式的编码)。

基本上不用担心,只是接受这是STA否则怪异的事情发生的Windows GUI线程必须标注。

  

请将STAThreadAttribute标志着一个螺纹   使用单线程COM   如果需要COM公寓。通过   默认情况下,.NET不会初始化COM在   所有。这是唯一需要COM时,   就像当一个COM对象或COM控制   创建或当拖动“n”个降   需要时,该COM被初始化。什么时候   出现这种情况,.NET调用   底层的CoInitializeEx功能,   这需要一个标志指示是否   加入线程多线程   或单线程单元。

更多信息此处(存档,2009年6月)

为什么STAThread需要?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top