我遇到了以下问题: 我想在后台下载一个带有WebBrowser控件(WPF)的网站,然后解析该网站。下载应该是“紧密循环”。我不需要显示页面。我只需要HTML源代码作为字符串。问题是该网站在加载后动态地添加JavaScript内容,这就是我使用这种方法的原因。 这应该同时适用于多个站点。
在我的下面的代码中有错误:“调用线程必须是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);
更新
我尝试使用StaTaskScheduler这样做但仍然没有UI更新任何deas我的错误是在一个额外的线程中提出它
StaTaskScheduler (TPL Extension) and WebBrowser Control WPF - Wrong Thread
谢谢!
答案 0 :(得分:0)
WebBrowser
已经异步,但我相信将在UI线程上执行脚本。
如果要将其拆分为真正独立的线程,可以使用STAThreadScheduler。听起来你每个网站都需要一个(STA)线程。