2011-09-02 103 views
3

這是我的主要方法的一部分:爲什麼我的C#應用​​程序在多線程單元上運行?

[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。任何想法爲什麼或應該在哪裏開始調查?

回答

2

你只是好奇,還是它導致了一些其他問題?通常這只是一個問題,如果你想在你的主要方法中做一些類型的COM交互。 Windows仍將在相應的ApartmentState中運行。

我最近沒有檢查過,但它曾經是無論屬性如何,Visual Studio強制MTA。您是否嘗試從Visual Studio之外運行應用程序?

如果這只是調試器中的問題,請取消選中項目屬性的「調試」部分下的「啓用Visual Studio宿主進程」。

+0

它導致AxWebBrowser出現問題。 – Ahmet

+0

是的,就是這樣。現在它在發佈模式下運行在STA上。謝謝! – Ahmet

+0

很高興我能幫到你。出於好奇,這是一個新項目還是從以前版本的Visual Studio轉換而來? –

1

此屬性爲應用程序設置COM線程模型。如果你的應用程序不使用COM互操作,它將不起作用。

MSDN

COM線程模型僅與使用COM互操作 應用。在不使用COM interop的應用程序中使用此屬性不起作用。

+1

那麼,它在應用程序方面沒有任何有用的影響 - 但線程仍應處於您指定的公寓狀態。 –

相關問題