c# - Winforms:一個COM對象需要一個STAThread,另一個需要一個MTAThread。 我怎樣才能使用它們?



apartment-state (1)

我試圖建立一個Winforms應用程序與兩個COM組件。 但是,其中一個組件僅在使用[MTAThread]時才起作用,另一個僅在[STAThread]起作用。

推薦的解決方案是什麼?


Windows窗體需要[STAThread]出現在它的主入口點上。 它將只在單線程的公寓狀態下工作。 您可以在Windows窗體中的UI線程上使用您的STA COM對象,而不會出現問題。

對此的典型方法是創建自己的線程,並將Thread.ApartmentState設置為單獨線程的MTA(雖然這是默認設置)。 在此線程中初始化並使用您的MTA-Threaded COM組件。

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();




apartment-state