Как я могу асинхронно обновить winform?

#c# #winforms #multithreading #delegates #asynchronous

#c# #winforms #многопоточность #делегаты #асинхронный

Вопрос:

У меня есть winform и соединение Bluetooth с кирпичом lego nxt. Теперь я хочу обновлять форму каждую секунду, чтобы считывать датчики или уровень заряда батареи. Но если я запускаю для этого новый поток, возникает исключение недопустимой операции потока, когда поток хочет задать текст метки.

Кто-нибудь может мне помочь?

Ответ №1:

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

Взгляните на управление методом .BeginInvoke() и извлеките это оттуда. Существуют и другие методы, такие как Control.Завершение вызова и управления.Вызовите а также управление свойством .Требуется вызов, который также будет полезен в этом контексте.

Ответ №2:

вам нужно вызвать обновления ваших меток обратно в основной поток

смотрите Dispatcher.Вызвать

Комментарии:

1. Обратите внимание, что он находится в WinForm, а не на основе WPF.

2. Вы правы. Я пропустил это. Я уже некоторое время застрял в режиме Silverlight / WPF 🙂