1
WebBrowserコントロール(WPF)をバックグラウンドでダウンロードし、後でそのサイトを解析したいと考えています。ダウンロードは"タイトループにする必要があります。私は文字列としてソースが必要です。私は結果を与えていない次のコードで試しました 私はStaTaskSchedulerでそれを使用しないと、 FREEZループ中。 任意のアイデア?StaTaskScheduler(TPL Extension)とWebBrowserコントロールWPF - 間違ったスレッド
あなたは
StaTaskScheduler sta = new StaTaskScheduler(numberOfThreads: 1);
private void Button1_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 2; i++)
{
Task.Factory.StartNew(() =>
{
WebBrowser wb3 = new WebBrowser();
wb3.Source = new Uri("MyURL");
n++;
wb3.LoadCompleted += new LoadCompletedEventHandler(wb_LoadCompleted);
}, CancellationToken.None, TaskCreationOptions.None, sta);
}
}
void wb_LoadCompleted(object sender, NavigationEventArgs e)
{
WebBrowser w = sender as WebBrowser;
HtmlDocument document = new HtmlDocument(w.Document);
blockingCollection.Add(document.Body.OuterHtml);
Task.Factory.StartNew(
() =>
{
while (!blockingCollection.IsCompleted)
{
string dlcode;
Thread.Sleep(500);
if (blockingCollection.TryTake(out dlcode))
{
// tb is a TextBox
Dispatcher.BeginInvoke(new Action(() => { tb.Text = dlcode; }));
}
}
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
}
リードが正しいです。 WebBrowserには、表示されていなくても、UIスレッドと対話するためのビジュアル要素があります。 –
ありがとうございます。私のサイトはコンテンツを動的に読み込むASP.NETサイトであり、通常のHTTPリクエストを使用するとコンテンツなしで空の文字列が得られるという問題があります。 申し訳ありませんが、私はこれについて言及するのを忘れました。だからこそ私はこのソリューションを使いたいのです。しかし、私は高速な解決策も必要としています。そして私にとっては、それはむしろ遅かったです。あなたがこの問題を解決する別の考えを持っているなら、私はとても幸せだろう。私は今失っている:( – user774326
多分MSHMTLを使用して、完全にウェブサイトをダウンロードし、文字列としてのソースを返すことは可能ですか?それはそれを表示せずに "エンジンを解釈するために"使用することを意味する? – user774326