我正在学习C#3.5,我想知道[STAThread]我们的程序中做什么?
[STAThread]
这STAThreadAttribute是Windows消息泵与COM组件进行通信的基本要求。尽管核心Windows窗体不使用COM,但OS的许多组件(如系统对话框)仍使用此技术。
STAThreadAttribute
MSDN更详细地解释了原因:
STAThreadAttribute指示应用程序的COM线程模型是单线程单元。在使用Windows窗体的任何应用程序的入口点上都必须存在此属性。如果省略,则Windows组件可能无法正常工作。如果该属性不存在,则应用程序将使用Windows窗体不支持的多线程单元模型。
这篇博客文章( 为什么需要STAThread? )也很好地解释了这一要求。如果您想更深入地了解线程模型在CLR级别的工作方式,请参阅2004年6月(存档,2009年4月)上的《MSDN杂志》这篇文章。