Window Form 程序使用多进程的方式

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

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力