Я использую .NET 4.0 (без async).Как я могу сделать Monitor.Wait с обработкой очереди сообщений?
Я ищу сочетание Monitor.Wait и Application.Run. Я просматриваю объект-проводник, но не могу его найти.
Он существует? Если нет, каков наилучший способ его реализации?
Я все еще ничего не пытался, потому что то, что я имею в виду, очень грязно. Что-то вроде этого:
while (!(timeOutHasBeenReached || aLockHasBeenAcquired))
{
Application.DoEvents() ;
}
Чтобы избежать проблемы XY, позвольте мне представить конечную цель (относится к единице тестирования):
using (ApplicationContext applicationContext = new ApplicationContext())
{
using (Control control = new Control() { Visible = true })
{
// control will do something across the web
// When the control has done it, it will raise an event invoking applicationContext.Exit()
// As a web connection is not always timing trustfull I'd like
// to specify a timeout (or eventually abort it with a Monitor.Pulse)
Application.Run(applicationContext);
}
}
управления является компонентом Winform, который я не могу изменить, и я дон 't хочу сделать Thread.Abort
.
Application.DoEvents() обычно (и много раз ошибочно) используется для «избежания» многопоточности. Итак, что вы пытаетесь сделать точно? – yms
@yms: Я сделал редактирование –
Невозможно отменить, выполнив 'control.Invoke (() => Application.Exit());'? Или просто 'control.Close();' или Dispose. – usr