C# Task线程问题,急!
我需要在Task线程的执行方法里创建和使用WebBrowser控件,但是运行后会报错:当前线程不在单线程单元中,因此无法实例化ActiveX控件“8856f961-340...
我需要在Task线程的执行方法里创建和使用WebBrowser控件,但是运行后会报错:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。
请问各位前辈们如何解决这个问题?谢谢了! 展开
请问各位前辈们如何解决这个问题?谢谢了! 展开
1个回答
展开全部
需要设置子线程 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;
});
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询