Я разрабатываю простое средство просмотра последовательных данных, которое будет использоваться для просмотра данных, передаваемых на один из последовательных портов компьютера. Я написал тестовое приложение, используя C# и WPF; он просто помещает последнюю прочитанную строку в текстовый блок. Однако он пропускает все остальные строки. Моя теория заключается в том, что новые данные помещаются в текстовый блок до того, как WPF отобразит окно. Однако я перепробовал все возможные комбинации приоритетов потоков, и в лучшем случае приложение показывает каждую вторую строку; в худшем случае отображаются каждые 20 строк.
Я работаю на многоядерном компьютере. Мое приложение состоит из текстового блока и кнопки открытия/закрытия порта. (Я попробовал заменить текстовый блок текстовым полем и обнаружил ту же проблему)
Мой обработчик DataReceived:
Код: Выделить всё
private void MainWindow_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string message = sp.ReadLine();
if (string.IsNullOrWhiteSpace(message))
return;
this.Dispatcher.BeginInvoke(DispatcherPriority.Send, (ThreadStart)delegate()
{
text.Text = message;
this.InvalidateVisual();
});
}
Наивысшим приоритетом этого приложения является обеспечение постоянной пропускной способности большого количества данных; подходит ли WPF в этой ситуации? Если да, то что я делаю не так?
Подробнее здесь:
https://stackoverflow.com/questions/422 ... pf-textbox