我遇到了以下问题: 我想在后台下载带有WebBrowser控件(WPF)的网站,然后解析网站。下载应该是一个“紧密的循环”。我不需要显示该页面。我只需要HTML源代码作为字符串。问题在于,该网站在加载后动态地使用JavaScript添加内容,这就是为什么我使用这种方法。 这实际上应该与几个网站同时工作。WPF TPL WebBrowser控制错误:调用线程必须是STA
在我的下面的代码中有错误:“调用线程必须是STA,因为许多UI组件需要这个”。
我知道如果将TaskScheduler更改为当前上下文,则不会收到错误消息。
但是我怎样才能在后台下载HTML源代码?
ADDITION 我必须将它添加到例如StackPanel withoud这个加法它不起作用
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);
UPDATE
我试图像这样与StaTaskScheduler仍然没有得到UI更新任何DEAS在我的错误是和postes它在一个额外的线程
StaTaskScheduler (TPL Extension) and WebBrowser Control WPF - Wrong Thread
谢谢!
我不想给出“答案”,因为这不是我的区域。也许你需要调度你的LoadedCompleted内容。我从来没有使用Task或WebBrowser,所以它只是一个猜测:)另一种在Background中加载某些内容的方式也是WPF方式,那就是使用BackgroundWorker。 – dowhilefor
谢谢你的回答。在这种情况下,TPL应取代Backgroundworker等。 我在WebBrowser获得错误消息wb2 = new WebBrowser(); – user774326