C#多线程ApartmentState.STA

需要设置子线程 ApartmentState 为 STA 模式,但 Task 又不能直接设置 ApartmentState,因此需要用 Thread 来封装一下。

复制代码
using System.Threading;
using System.Threading.Tasks;
 
public static Task<T> StartSTATask<T>(Func<T> func)
{
    var tcs = new TaskCompletionSource<T>();
    var thread = new Thread(() =>
    {
        try
        {
            tcs.SetResult(func());
        }
        catch (Exception e)
        {
            tcs.SetException(e);
        }
    });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    return tcs.Task;
}
 
var task = StartSTATask<WebBrowser>(() =>
{
    WebBrowser browser = new WebBrowser();
    return browser;
});
复制代码

作者:阿笨

      【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558跟着阿笨一起玩NET

      【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616跟着阿笨一起玩C#

      【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586跟着阿笨一起玩ASP.NET

      【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:806491485Asp.Net Core跨平台技术开

      【官方QQ五群:.NET Core跨平台开发技术(可加入)】:1036896405.NET Core跨平台开发技术

      【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628

      【腾讯课堂】:https://abennet.ke.qq.com

      【51CTO学院】:https://edu.51cto.com/sd/66c64

      【微信公众号】:http://dwz.cn/ABenNET

原文地址:https://www.cnblogs.com/51net/p/15057061.html