다음과 같은 문제가 있습니다. WebBrowser 컨트롤 (WPF)을 사용하여 백그라운드에서 웹 사이트를 다운로드하고 나중에 사이트를 구문 분석하려고합니다. 다운로드는 "엄격한 루프"에 있어야합니다. 나는 그 페이지를 표시 할 필요가 없다. HTML 소스는 문자열로만 필요합니다. 문제는 사이트가 동적으로로드 된 후에 JavaScript로 콘텐츠를 추가한다는 것입니다. 그래서이 방법을 사용합니다. 이것은 실제로 여러 사이트에서 동시에 작동해야합니다.WPF TPL WebBrowser 컨트롤 오류 : 호출 스레드가 STA 여야합니다.
다음 코드에는 "많은 UI 구성 요소에이 기능이 필요하므로 호출하는 스레드가 STA 여야합니다."라는 오류가 있습니다.
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);
UPDATE
나는 그럼에도 불구하고 어떤 UI 업데이트를 얻을 수없는 StaTaskScheduler와 같이 그것을 시도 내 실수이고 여분의 스레드를 하지요 모든 DEAS
StaTaskScheduler (TPL Extension) and WebBrowser Control WPF - Wrong Thread
고마워요!
내 지역이 아니기 때문에 "대답"하고 싶지 않습니다. 아마도 귀하의 LoadedCompleted 콘텐츠를 파견해야 할 것입니다. Task 나 WebBrowser를 사용하지 않았습니다. 그냥 추측합니다 :) WPF 방식 인 Background에서 뭔가를로드하는 또 다른 방법은 BackgroundWorker를 사용하는 것입니다. – dowhilefor
답변 해 주셔서 감사합니다. 이 경우 TPL은 Backgroundworker 등을 대체해야합니다. WebBrowser에서 오류 메시지가 표시됩니다. wb2 = new WebBrowser(); – user774326