В настоящее время у меня есть консольное приложение, написанное в Visual C# (2013)
. Он открывает соединение с USB Multimeter
, а затем записывает значение в консоль. Теперь я хотел бы сделать это надлежащим WinForms
или WPF
(данные получаются, данные отправляются в поток пользовательского интерфейса, данные отображаются в таблице/графике и т. Д.). Для этого мне нужно получить данные по отдельному потоку, поскольку данные отправляются через каждые 0.12мс (что блокирует пользовательский интерфейс в основном потоке).Лучший способ обработки асинхронных запросов данных USB?
Я проделал некоторое чтение как задач Threading, так и Async и пока не решил, что лучше всего подходит для задачи. Какой из этих (или других методов) был бы вашим методом выбора для его реализации?
Обратите внимание, что я не прошу людей написать свой код для меня, я просто спрашиваю, какой из них лучший метод.
Все, что вам действительно нужно использовать, - это «Диспетчер», который будет маршрутизировать вызовы на другой поток в поток пользовательского интерфейса. Вы можете запустить «BackgroundWorker», который запрашивает USB-порт, используя уже существующий код, и просто отправлять любые обновления в пользовательский интерфейс. Вы даже можете использовать таймер ('System.Threading.Timer'), который срабатывает периодически, и использовать диспетчер в этом. Диспетчер будет находиться в вашем базовом классе окна WPF/UC, и он выполняет обратный вызов, который будет запущен в потоке пользовательского интерфейса: например. 'Dispatcher.Invoke (() => {// код для обновления интерфейса здесь});' – Charleh