以1ms速率(WPF)在C#datagrid上显示数据
我正在开发一个C#应用程序,在这里我每1毫秒获得一次USB数据,我的应用程序有一个数据网格,它打算在收到这些帧后立即显示这些帧。我这里的问题是,由于数据速率太高,我的网格在启动10-15秒后停止或应用程序冻结。我已经创建了单独的线程来处理这个显示部分,尽管它对我没有帮助。数据网格是否能够以1ms的速率显示数据?我应该用其他方法让它工作吗?任何帮助、暗示或建议都会大有裨益。 多谢各位 代码:gui()函数作为线程生成,datatable作为参数传递。下面的驱动程序接收的数据将数据添加到datatable,然后作为gui()funtn的参数传递以1ms速率(WPF)在C#datagrid上显示数据,c#,wpf,datagrid,display,C#,Wpf,Datagrid,Display,我正在开发一个C#应用程序,在这里我每1毫秒获得一次USB数据,我的应用程序有一个数据网格,它打算在收到这些帧后立即显示这些帧。我这里的问题是,由于数据速率太高,我的网格在启动10-15秒后停止或应用程序冻结。我已经创建了单独的线程来处理这个显示部分,尽管它对我没有帮助。数据网格是否能够以1ms的速率显示数据?我应该用其他方法让它工作吗?任何帮助、暗示或建议都会大有裨益。 多谢各位 代码:gui()函数作为线程生成,datatable作为参数传递。下面的驱动程序接收的数据将数据添加到datata
你能显示一些你已经尝试过的初始代码吗?1ms。当第一个请求完成时,您不能发送第二个请求吗?由于数据以高速呈现,您必须使用虚拟化概念。使用ListView代替Datagrid,因为它具有虚拟化功能。你可以找到一个很好的讨论我已经编辑和添加的代码,请看一看@Janonimu以这样的频率更新用户界面毫无意义。它甚至都看不见。您应该将数据排队,并每秒更新DataGrid 20或30次。
public static DataView dataview = new DataView();
public static void gui(DataTable dt)
{
try
{
if (dt != null)
{
lock (Lock)
{
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(delegate()
{
main.dgUsers.ItemsSource = null;
dataview = dt.DefaultView;
main.dgUsers.ItemsSource = dataview;
main.dgUsers.Items.Refresh();
//For auto scroll through the data grid
if (main.dgUsers.Items.Count > 0)
{
var border = VisualTreeHelper.GetChild(main.dgUsers, 0) as Decorator;
if (border != null)
{
var scroll = border.Child as ScrollViewer;
if (scroll != null) scroll.ScrollToEnd();
}
}
}));
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}