Я использую объект, который позволяет мне подписаться на события:
easyModbusTCPServer.holdingRegistersChanged += new EasyModbus.ModbusServer.HoldingRegistersChanged(RegistersChanged);
При каждом запуске этого события вызывается функция «RegistersChanged», которая запускает или останавливает некоторый «долго выполняющийся код» ( остановка происходит путем изменения логического «StopRunning» на «True»)
К сожалению, остановка «долго работающего кода» не работает. Я думаю, что так как "долго работающий код" занят в основном потоке, он блокирует обработчик событий "registersChanged" от достижения ....
Возможно ли, чтобы функция "RegistersChanged" вызывалась в другом поток, поэтому функция «RegistersChanged» по-прежнему вызывается, и «длительный код» в главном потоке может быть остановлен.
Вместо помещения обработчика событий в отдельный поток, я мог бы поместить длинный запуск кода в отдельном потоке, но, к сожалению, этот «долго работающий код» является сложным и требует взаимодействия со многими объектами, созданными в основном потоке ....
Не важно, что пользовательский интерфейс не может использоваться пока код работает.
Спасибо,