C# Task线程问题,急!

我需要在Task线程的执行方法里创建和使用WebBrowser控件,但是运行后会报错:当前线程不在单线程单元中,因此无法实例化ActiveX控件“8856f961-340... 我需要在Task线程的执行方法里创建和使用WebBrowser控件,但是运行后会报错:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。
请问各位前辈们如何解决这个问题?谢谢了!
展开
 我来答
然后去远足
2016-09-18 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2443万
展开全部

需要设置子线程 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;
});
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式