Как уже указывал предыдущий плакат, для этого не существует «правильного» способа. В зависимости от объема вашего проекта существует несколько различных подходов. Для общей процедуры регистрации и обработки событий .NET у NI есть хороший пример: https://decibel.ni.com/content/docs/DOC-9161
Этот образец кода является «обработчиком таймера» (с использованием встроенного .NET-таймера API) и иллюстрирует, как регистрироваться для события и создавать ваш обратный вызов VI. Давайте изменим это, чтобы достичь вашей цели. Чтобы сделать это, мы должны каким-то образом обмениваться данными с помощью нашего обратного вызова VI на другую часть программы (содержащую числовой индикатор, который мы хотим обновить). Варианты установления связи между отдельными частями нашего приложения:
- Глобальные переменные
- Функциональная глобальная переменная
- управления/индикатор ссылается
- Структурированные механизм синхронизации (т.е. очереди, уведомитель и т.д.)
- Система обмена сообщениями (например, UDP через локальный шлейф, управляемые очереди и т. Д.)
Есть мужчина y, много вариантов, и это, конечно, не исчерпывающий список. Каждый подход имеет свои преимущества и недостатки, и ваши решения должны основываться на том, какое приложение вы пишете. Обратите внимание, что некоторые из них лучше, чем другие. Мое предпочтение (при написании довольно простого приложения) заключалось бы в использовании чего-то вроде уведомителя для одноточечного обновления данных. Мое мнение состоит в том, что это обеспечивает достаточную гибкость/мощность, и вы не получите поступок за очки стиля.
Ниже приведена модифицированная версия примерной программы NI с использованием уведомителя для передачи данных из VI обратного вызова на верхний уровень VI. Когда событие срабатывает, обратный вызов подталкивает некоторые данные в уведомитель, чтобы сигнализировать на ВП верхнего уровня, что истекшее время истекло, и произошло событие. VI верхнего уровня ожидает уведомления и использует предоставленные данные для обновления значения числового индикатора.
Обратите внимание, что это очень тривиальный пример. В этом случае мне даже не нужно отправлять какие-либо данные. Я знаю, что если уведомитель не отключился, чтобы событие запустилось и может впоследствии увеличить счетчик на верхнем уровне. Однако уведомитель позволяет вам гибко записывать произвольные данные в канал связи. Следовательно, он может сказать мне: «Эй, ваше состояние произошло!» и «вот некоторые данные, которые были сгенерированы».
Callback VI
Top Level VI
Если вы пишете большие Appl Ваш цикл для отслеживания уведомления может выполняться параллельно с другим кодом. Это позволяет вам иметь асинхронный механизм для мониторинга состояния события и отображения его в графическом интерфейсе. Этот подход позволяет отслеживать события, не мешая остальной части вашего приложения.