"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 сработало

Другие вопросы по тегам