Я знаю, что это может показаться глупым вопросом, но вот моя проблема.
У меня есть рабочий диалог, который «скрывает» фонового работника, поэтому в рабочем потоке я делаю свою работу, я сообщаю о прогрессе стандартным способом, а затем показываю результаты в моей программе WPF.
Диалоговое окно содержит просто анимированный GIF и стандартный индикатор выполнения wpf, и когда уведомление о прогрессе, я устанавливаю свойство Value. Все выглядит так, как обычно, и хорошо работает для любых задач, таких как вызовы веб-служб, запросы к базам данных, проработка фона и так далее.
Для моей работы мы также используем много «сцепок», кард-ридеров, которые считывают данные со смарт-карты, которые управляются с помощью собственного кода C, который обращается к последовательному порту (поэтому я не использую объект .NET SerialPort).
У меня есть несколько тестов на унитаз, и я читаю образец карты за 10 секунд, но, используя свою настоящую программу, в фоновом режиме и показывая диалоговое окно рабочего, мне нужно 1,30 минут, чтобы выполнить ту же работу.
Я боролся с проблемой в течение нескольких дней, пока не решил удалить рабочий диалог, и без диалога я получаю те же результаты тестов!
Так что я исследовал, и это не диалог, не анимированный GIF, а индикатор выполнения wpf!
Просто тот факт, что отображается индикатор выполнения (то есть без анимации, без вызова набора значений, ничего из ничего), замедляет обмен данными через последовательный порт.
Выглядит невероятно? Я проверил это поведение, и это именно то, что происходит.