У меня есть окно с контролем браузера внутри него. Когда кто-то закрывает окно, мне нужно перейти к управлению браузером на определенный URL-адрес, и только после того, как браузер завершит навигацию, окно нужно закрыть.Приостановка выполнения метода, выполняющегося в потоке пользовательского интерфейса
Когда окно закрыто, вызывается метод OnBeforeWindowClose(Eventargs e)
.
OnBeforeWindowClose(Eventargs e)
{
// As soon as the URL property is set the browser control navigates to the URL
URL = "new URL";
//I need to wait till the browser is done navigating. Based on the NavigationFinished property below
}
bool NavigationFinished {set; get;}
Я не могу использовать Thread.Sleep
, потому что это приведет поток пользовательского интерфейса спать. Я не могу найти способ приостановить выполнение OnBeforeClose до тех пор, пока NavigationFinised не станет истинным. Без блокировки потока пользовательского интерфейса.
UPDATE: Добавление следующего цикла в OnBeforeWindowClose метод работало для меня
do
{
var dateTime = DateTime.Now.AddSeconds(2);
while (DateTime.Now < dateTime)
{
System.Windows.Forms.Application.DoEvents();
}
} while (!NavigationFinished);
Но мне было интересно, если есть лучший способ сделать это вместо того, чтобы использовать петлю в .Net 4.0
Вы ищете 'await'. – SLaks
Его нет в .net 4.0 :( – Kaddy
Установите 'Microsoft.Bcl.Async' на NuGet. – SLaks