为什么我的C#应用程序运行在多线程单元上?
这是我主要方法的一部分:为什么我的C#应用程序运行在多线程单元上?,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,这是我主要方法的一部分: [STAThread] static void Main(string[] args) { #if !DEBUG try { #endif ApartmentState aps = System.Threading.Thread.CurrentThread.GetApartmentState(); //System.Threading.Thread.CurrentThread.SetApartmentState(ApartmentSt
[STAThread]
static void Main(string[] args)
{
#if !DEBUG
try
{
#endif
ApartmentState aps = System.Threading.Thread.CurrentThread.GetApartmentState();
//System.Threading.Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
MessageBox.Show(aps.ToString());
消息显示
MTA
。知道我应该从哪里开始调查吗?此属性设置应用程序的COM线程模型。如果应用程序未使用COM互操作,则不会产生任何效果
从
COM线程模型仅适用于使用COM的应用程序
互操作。在不使用COM的应用程序中使用此属性
互操作没有效果
你只是好奇,还是这引起了其他问题?通常,只有当您试图在主方法中执行某些类型的COM交互时,这才是一个问题。Windows仍将在相应的ApartmentState中运行 我最近没有检查,但过去无论属性如何,VisualStudio都会强制MTA。您是否尝试从Visual Studio外部运行应用程序
如果这只是调试器中的一个问题,请取消选中项目属性的“调试”部分下的“启用Visual Studio宿主进程”。好吧,它对应用程序没有任何有用的影响-但线程仍应处于指定的单元状态。这会导致AxWebBrowser出现问题。是的,就是这样。现在,当处于释放模式时,它在STA上运行。谢谢很高兴我能帮忙。出于好奇,这是一个新项目还是从Visual Studio?.NET 4.0的早期版本转换而来的。我在VS 2010 Express上开始了这个项目,然后转向专业版,现在是终极版,因为BizSpark发布了:)。到目前为止,我还没有发现它更有用。