我正在开发一个简单的串行数据查看器,用于监视发送到计算机串行端口的数据。我使用C#和WPF编写了一个测试应用程序;它只是将最近读取的行放入文本块中。然而,它会跳过每隔一行。我的理论是在WPF渲染窗口之前新数据被放入文本块。然而,我尝试了我能想到的所有线程优先级的组合,但最多只显示每隔一行;最糟糕的情况是每20行才显示一次。
我正在多核计算机上运行。我的应用程序由一个文本块和一个按钮来打开/关闭端口组成。(我已经尝试用文本框替换文本块,并且观察到相同的问题)
我的处理程序:
这个应用程序最重要的优先事项是处理大量数据的持续吞吐量;在这种情况下,WPF是否合适?如果合适,我做错了什么?
我正在多核计算机上运行。我的应用程序由一个文本块和一个按钮来打开/关闭端口组成。(我已经尝试用文本框替换文本块,并且观察到相同的问题)
我的处理程序:
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是否合适?如果合适,我做错了什么?