Не лучший способ, но вы можете использовать это ...

у вызвать webBrowser.Navigate (строка urlString) синхронно, где webBrowser - это управление окнами. Я делаю это таким образом

...
private delegate void NavigateDelegate(string s);
...
private void Function()
{
    NavigateDelegate navigateDelegate = 
        new NavigateDelegate(this.webBrowser1.Navigate);
    IAsyncResult asyncResult = 
        navigateDelegate.BeginInvoke("http://google.com", null, null);

    while (!asyncResult.IsCompleted)
    {
        Thread.Sleep(10);
    }

    MessageBox.Show("Operation has completed !");
}

но сообщение никогда не отправляется ПОЧЕМУ этот код не работает должным образом?

 VikciaR28 мая 2011 г., 17:16
Вам не нужно использовать делегат - webbrowser.Navigate - это асинхронный метод.msdn.microsoft.com/en-us/library/...
 VikciaR28 мая 2011 г., 18:00
Delegate.BeginInvoke является асинхронным методом. Ваш код работает асинхронный метод асинхронный: два раза асинхронный. Так что это совсем не то, что вы хотите делать.
 Disappointed28 мая 2011 г., 17:25
я знал, что этот метод асинхронный. И я хотел переделать это синхронно, и я думал, что этот код поможет мне ...
 Disappointed28 мая 2011 г., 18:58
ты совершенно прав! Спасибо

Ответы на вопрос(2)

Решение Вопроса

чтобы получить страницуsyncronously:

this.webBrowser.DocumentCompleted += WebBrowserDocumentCompleted;
this.webBrowser.Navigate("http://google.com");

private void WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  MessageBox.Show("Operation has completed !");
}
 VikciaR28 мая 2011 г., 19:19
Если вы напишите в ответе «Синхронный» и имеете в виду, что это асинхронный (поскольку синхронный может блокировать основной поток), это может привести к неправильному пониманию читателем. Кстати, я почти уверен, что внутренне Navigate также использует отдельный поток.
 Teoman Soygul28 мая 2011 г., 17:05
Ваш код не работает, потому что вы пытаетесь использовать функцию Navigate асинхронно. Чтобы получить результат, вам нужно будет использовать EndInvoke, но если вам нужен синхронизирующий способ вызова, то этот фрагмент кода выше.
 Teoman Soygul28 мая 2011 г., 18:20
Да, но не в смысле использования BeginInvoke или отдельного потока. Основной поток может быть легко заблокирован с помощью сна во время загрузки документа.
 VikciaR28 мая 2011 г., 18:18
Ваш образец асинхронный.
 Disappointed28 мая 2011 г., 17:03
Спасибо Teoman за очень быстрый ответ, но мне довольно интересно, ПОЧЕМУ мой код не работает, а не как я могу это реализовать!

но вы можете использовать это ...

while (this.webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
     Application.DoEvents();
     Thread.Sleep(100);
}

Ваш ответ на вопрос