2011-10-12 2 views
0

Я думал, что это может быть просто, но я думаю, что это не так, у меня есть 100 сайтов, которые мне нужно загрузить в браузер. Я загрузил их в список, но мой foreach происходит до загрузки сайта. У кого-нибудь есть способ сделать каждый из этих загрузок и фактически обработать WebBrowserDocumentComplete перед загрузкой следующего? очередь не работает.C# Как сделать WebBrowserDocumentComplete в цикле foreach

foreach(string oneWebsite in ALLWebSites) 
{ 
webBrowser1.Navigate(oneWebsite); 
webBrowser1.DocumentCompleted += new  WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); 
} 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
//do work 
} 
+0

Можете ли вы предоставить образец кода, что вы пытались? – user957902

+0

код предоставлен .. –

+1

такой же как ваш предыдущий вопрос: http://stackoverflow.com/questions/7678414/c-webbrowserdocumentcompletedeventhandler-inside-of-foreach-loop – BrokenGlass

ответ

1

AutoResetEvent должен работать

http://msdn.microsoft.com/en-us/library/system.threading.waithandle.waitone(v=vs.71).aspx

static AutoResetEvent autoEvent = new AutoResetEvent(false); 


webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); 
foreach(string oneWebsite in ALLWebSites) 
{ 
webBrowser1.Navigate(oneWebsite); 
autoEvent.WaitOne(new TimeSpan(0, 1, 0), false)) 
} 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
{ 
//do work 
autoEvent.Set(); 
} 
+0

Это может работать или не работать в зависимости от того, какой поток вызывает событие DocumentCOmplete. У меня есть компонент, который я пытался использовать autoresetevent для, и его события поднимаются в основном потоке пользовательского интерфейса .. так что в этом случае не работает. –

0

В конце обработчика DocumentComplete есть браузер перейти к следующему месту в списке.

0

Что-то, как это должно работать:

var websiteIndex = 0; 
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); 

private void ProcessWebsite() 
{ 
    if (websiteIndex < ALLWebSites.Count) 
    { 
     webBrowser1.Navigate(ALLWebSites[websiteIndex]); 
     websiteIndex++; 
    } 
} 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    //do work 

    // when work is done, process next one 
    ProcessWebsite(); 
} 
Смежные вопросы