Если у вас есть дескриптор главной формы (или любого элемента управления), вы можете использовать Control.Invoke
/ Control.BeginInvoke
.
Если вы не хотите раздавать экземпляр Control
, вы можете дать внешнему коду экземпляр ISynchronizeInvoke
(любой элемент управления сделает это или написать свой собственный класс, который обернет a Control
для предотвращения призыва вызывающего абонента). Затем вызывающая сторона может использовать это для выполнения методов.
Наконец, рассмотрите возможность использования событий; работающий код вызывает события, которые обрабатывает ваш пользовательский интерфейс; Пользовательский интерфейс может затем вызвать Control.Invoke
локально для обработки данных.