2023-04-11 乐帮网
c#
STAThread和MTAThread中是C#中的常见的两种模式,其中STAThread: single threaded apartment 直译过来是:单线程单元套间; MTAThread:multiple threaded apartment 直译过来是:多线程单元套间。
其他线程对STA中的COM对象的访问需要列集(marshal),通过列集,自动实现了多线程访问下的同步。所有线程对MTA中的COM对象的访问不需要列集,直接访问,需要COM组件自身实现多线程下的同步。
在编写Window Form 程序时会遇到使用COM对象的场景,这个时候可以使用以下两种方式指定MTAThread模式。代码如下:
Program类如下:
static class Program
{
static System.Threading.Thread _thread;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
_thread = new System.Threading.Thread(HostProcess);
_thread.IsBackground = true;
_thread.Start();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
[MTAThread]
static void HostProcess()
{
ControlService.StartService();
}
}
除此之外我也还可以指定Thread的模式如下:
System.Threading.Thread _thread;
_thread = new System.Threading.Thread(MyFun);
_thread.IsBackground = true;
_thread.SetApartmentState(System.Threading.ApartmentState.MTA);
_thread.Start();
两种方式效果都是一样的。
关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力