【发布时间】:2014-10-29 16:06:00
【问题描述】:
我正在编写一个通过串行端口从设备读取信息的程序。我有一个数据网格中可用设备的列表。当用户单击一行时,它会从设备中获取信息并将其显示在单独的列表中。设备响应和填充信息通常需要大约一秒钟的时间。但是,在这一秒内,数据网格行不会突出显示为选中状态。因此,从鼠标单击数据网格行到实际显示为突出显示/选中需要大约一秒钟。
我认为使用后台工作线程是最好的选择,但我使用下面的代码得到了相同的结果。我是否使用不正确,或者我应该做些什么来选择数据网格行?
private void relayList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += GetLinks;
worker.RunWorkerAsync();
}
private void GetLinks(object sender, DoWorkEventArgs e)
{
//send message to viewModel and do time-consuming work here
}
【问题讨论】:
-
不是在 SelectionChanged 事件中读取,而是在 MouseUp 事件中读取,当然条件是确定是否应该开始读取。
-
您确定约 1 秒的延迟表示等待设备所花费的时间,而不是更新 UI 作为响应所花费的时间吗?最好在在这里花费太多时间之前验证这一点。还要确保在进行计算时,您没有从视图模型中将自己编组回
Dispatcher。 -
抱歉耽搁了,我被叫走了。感谢您的回复;我会同时尝试并更新。
-
你有没有在下面给出我的答案?
-
@DaleFrancis 我真的很感激这个答案,但我不太明白。我正在阅读它并现在尝试。
标签: wpf datagrid backgroundworker