我什么时候应该为 ApartmentState.STA 设置一个线程?

Rac*_*acs 4 .net c#

我很想知道 C# .net 中何时使用 STA/MTA?

using (ManualResetEventSlim mre = new ManualResetEventSlim(false)) 
{       
    Thread _STAThread = new Thread(new ThreadStart(() =>                 
        {
             globalComObject = new ComClass();                     
             mre.Set();                     
             try                     
             {                         
                  Thread.CurrentThread.Join();
             }
             catch (ThreadAbortException)                     
             { } 
         }));
     _STAThread.SetApartmentState(ApartmentState.STA);                    
     _STAThread.IsBackground = true;                 
     _STAThread.Start();                 
     mre.Wait(); 
} 
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 5

与 STA/MTA COM 对象进行互操作时可以使用它们。


小智 5

这个stackoverflow 答案会给你很多。另请阅读页面和此 MSDN 页面。其要点是 STA 单元用于非线程安全的 COM 对象,而 MTA 可以以多线程方式使用线程安全的 COM 对象。