Вы можете обновить метку в любой форме из фонового рабочего, используя Invoke(...)
, как вы это сделали. (Предполагая, что стимул - это поле).
Достаточно один раз вызвать Invoke. Stimulus.Invoke
выполняет делегат в управляющем потоке формы стимула. Таким образом, вы можете решить, куда вы отправляете нить. Я бы рекомендовал сделать это в perbarauiStimulus
, так как это уменьшит вероятность того, что кто-то забудет отправить вызов.
Но есть одна потенциальная проблема с вашим кодом:
Не используйте точное сравнение за прошедшее время. Предпочитаю использовать «> =». Поскольку вы имеете дело с секундами, это редко будет реальной проблемой, но это может привести к бесконечному циклу.
Если stimulus
не является полем, вы должны создать экземпляр Stimulus
вне фонового рабочего, потому что, если вы создадите его в рабочем методе, форма будет запускать свое сообщение Цикл на фоне рабочего потока. Это исключает использование фонового работника, поскольку операция теперь выполняется синхронно из представления sytimulus.