"Invoke" и "BeginInvoke" называются, но никогда не разрешаются
Я забочусь о потоке графического интерфейса программного обеспечения. Я должен отображать внутри GridView данные, которые должны постоянно опрашиваться из базовых API. Я создал метод под названием Sync()
который обновляет данные, и я попытался сделать это потокобезопасным с помощью BeginInvoke
и / или Invoke
, Sync
метод вызывается таймером каждые пять секунд или около того.
Тело Sync
никогда не вызывается, так как по какой-то причине кажется, что мой запрос никогда не извлекается из сообщения. Код:
public void Sync()
{
if (this.InvokeRequired)
{
logger.Debug("Begin Invoke of Sync operation");
this.Invoke(new SyncDelegate(Sync));
logger.Debug("End Invoke of Sync operation");
}
else
{
logger.Debug("Inside body");
}
}
Лог выглядит так:
10:00:00 Begin Invoke of Sync operation
... other stuff ...
10:00:05 Begin Invoke of Sync operation
... other stuff ...
10:00:10 Begin Invoke of Sync operation
Другие сообщения никогда не печатаются.
То же самое для BeginInvoke
, "End Invoke ... " печатается, но "inside body ..." никогда не печатается.
Я работаю поверх Unity3D и MonoDevelop (если это что-то изменит).
1 ответ
Решаемые. По-видимому, я создавал форму Windows вне команды Application.Run. По какой-то причине создание экземпляра Form внутри Application.Run сработало