У меня есть какое-то коммерческое оборудование, к которому я могу подключиться с помощью библиотеки .Net, поставляемой производителем оборудования, поэтому я не могу контролировать библиотеку или оборудование, только мой код.
Производитель настроил свою систему так, чтобы, если вы не подключены к оборудованию через их библиотеку, она работала нормально. Однако, когда вы соединяетесь с их библиотекой, существует неявное требование, чтобы вы обслуживали насос сообщений Windows со скоростью, установленной скоростью работы оборудования. Это потому, что в их библиотеке реализована система событий, на которую вы можете подписаться, чтобы отслеживать работу оборудования, но они предполагают, что код вашего приложения будет основан на WinForms. (Но в их документации нет ничего явно заявленного - только то, что все 2 из их примеров программ .Net основаны на WinForms.) Я подтвердил с их технической поддержкой, что вы ожидаете, что вы будете использовать приложение WinForms.
В моем случае я пишу приложение на C #, не основанное на WinForms (на самом деле это служба Windows, поэтому у меня нет потока пользовательского интерфейса), и хотя я подключаюсь к оборудованию, я не подписываюсь ни на одно из событий. , В результате я обнаружил, что мне нужно ссылаться на сборку WinForms и вызывать Application.DoEvents () с достаточно высокой скоростью, чтобы обслуживать все те события, на которые я не подписан.
Итак, мои вопросы таковы:
- В этом случае вызов Application.DoEvents () мой единственный вариант?
- Или есть более современный способ сделать это?
- Каковы последствия вызова DoEvents () при скорости 20 мс?
- Не имеет отношения, но если бы я написал приложение на основе WPF, вероятно, эта программа будет обслуживать насос сообщений?
Редактировать
Я должен добавить, что если вы подключаетесь к оборудованию и не обслуживаете насос сообщений Windows (даже если не подписаны ни на одно из их событий), то падение оборудования начинает вести себя непредсказуемо.
Редактировать 2
Кроме того, поток, который я использую для взаимодействия с библиотекой, удален примерно на 2-3 поколения из исходного потока службы Windows.