Синхронизация вызовов событий из потоков в обработчики событий в Windows Forms - PullRequest
0 голосов
/ 21 августа 2010

У меня есть объект, который обновляется из цикла опроса в потоке.Этот объект вызывает определенные события при изменении данных и т. Д.

Я пытаюсь использовать этот объект вместе с формой Windows, где я создаю обработчики событий в форме для обновления пользовательского интерфейса.Конечно, это вызывает исключения операций между потоками, если я пытаюсь манипулировать интерфейсом непосредственно в этих обработчиках.

Я могу заставить его работать, пройдя стандартную процедуру проверки InvokeRequired с использованием делегата, бла-блал.Но я хочу опубликовать этот объект как библиотеку, и я не хочу, чтобы конечные пользователи беспокоились обо всем этом.

Я хочу, чтобы мой объект как-то позаботился о синхронизации этих обратных вызовов событий с формойтак что конечные пользователи могут манипулировать элементами пользовательского интерфейса в этих обработчиках без проблем.

Есть ли способ сделать это ??

1 Ответ

0 голосов
/ 21 августа 2010

Если ваш объект всегда связан с одной формой, на самом деле есть простой трюк. Важным фактом здесь является то, что вы создаете экземпляр своего объекта из потока, который вам нравится, чтобы позже воздействовать на форму.

Хитрость заключается в том, чтобы создать простой Control (новый Control ()) в вашем объекте в конструкторе. Когда вы выполняете логику в своей форме, используйте методы Invoke / BeginInvoke в этом простом элементе управления, чтобы передать действие правильному вызывающему потоку. Таким образом, у вас есть логика диспетчеризации непосредственно в вашем объекте, и нет необходимости для других пользователей вашего объекта позаботиться об этом.

...