私は次の問題があります。 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