WPF TPL WebBrowser控制错误:调用线程必须是STA
本文关键字:线程 STA 调用 TPL WebBrowser 控制 错误 WPF | 更新日期: 2023-09-27 18:05:10
我有以下问题:我想下载一个网站与web浏览器控制(WPF)在后台和解析网站之后。下载应该是一个"紧密循环"。我不需要显示页面。我只需要HTML源作为字符串。问题是网站在加载后动态添加JavaScript内容,这就是我使用这种方法的原因。这实际上应该同时适用于多个站点。
在我下面的代码中有一个错误:"调用线程必须是STA,因为许多UI组件需要这个"。
我知道如果我将TaskScheduler更改为当前上下文,我不会得到错误消息。
但是如何在后台下载HTML源代码呢?
添加我必须将其添加到例如StackPanel中,如果没有此添加,它就不起作用
stackpanel.Children.Add(wb2);
任何想法?
提前谢谢你
private void Button1_Click(object sender, RoutedEventArgs e)
{Task.Factory.StartNew(
() =>
{
WebBrowser wb2 = new WebBrowser(); // That's where I get the error essage
wb2.Source = new Uri(MySite);
wb2.LoadCompleted += new LoadCompletedEventHandler(wb_LoadCompleted);
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
}
void wb_LoadCompleted(object sender, NavigationEventArgs e)
{
WebBrowser w = sender as WebBrowser;
HtmlDocument document = new HtmlDocument(w.Document);
我尝试过这样与StaTaskScheduler,但没有得到UI更新任何想法,我的错误是,并在一个额外的线程张贴它
StaTaskScheduler (TPL扩展)和WebBrowser控件WPF -错误线程
谢谢!
WebBrowser
已经是异步的,尽管我相信它将在UI线程上执行脚本。
如果你想把它分割成一个真正独立的线程,你可以使用STAThreadScheduler。这听起来像你想要一个(STA)线程每个网站。