1
백그라운드에서 WebBrowser 컨트롤 (WPF)을 사용하여 웹 사이트를 다운로드하고 나중에 사이트를 구문 분석하려고합니다. 다운로드는 " 빡빡한 루프에 있어야합니다. 나는 단지 문자열로 소스가 필요합니다. 결과를주지 않은 다음 코드로 시도했습니다. StaTaskScheduler와 함께 사용하지 않으면 FREEZ 루프 동안. 어떤 아이디어?StaTaskScheduler (TPL 확장) 및 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