性能问题添加项目到ListView。如何降低刷新率?

时间:2019-07-16 21:35:43

标签: c# wpf listview

应用程序在CAN总线上读取和写入CAN消息。

我想以两种特定模式将项目添加到我的listView中。一种模式是静态模式。具有新标识符的任何项目都将以数字顺序插入列表。标识符与现有项目匹配的任何项目都将替换现有项目。列表的大小与唯一标识符的数量相同。

另一个模式正在滚动。最新消息将始终显示在列表视图的顶部。

此刻,我直接添加到列表视图

ListView.Items.insert(0, item)

ListView.Items[index] = item

问题是,当消息的频率变得很高时,新消息的绘制将无法跟上。我希望以某种合理的刷新率更新图纸。

我读过将项目直接添加到列表视图不是使用wpf的最佳方法,但是我添加项目的特定模式将我带到了这条路。

滚动模式

        private void scrollMessage(DisplayCANMessage receivedMessage)
        {
            receivedMessage.Count = ((DisplayCANMessage)ListViewCANmessages.Items[0]).Count + 1;
            Dispatcher.Invoke(() =>
            {
                ListViewCANmessages.Items.Insert(0, receivedMessage);
            });
        }

静态模式

        private void staticMessage(DisplayCANMessage receivedMessage, List<DisplayCANMessage> messageList)
        {
            int index = messageList.BinarySearch(receivedMessage);

            if (index < 0)
                messageList.Insert(~index, receivedMessage);
            else
                messageList[index] = receivedMessage;

            Dispatcher.Invoke(() =>
            {
                if (index >= 0)
                {
                    DisplayCANMessage existingMessage = (DisplayCANMessage)ListViewCANmessages.Items[index];
                    receivedMessage = receivedMessage.calculateStaticCountAndTimeInterval(existingMessage);
                    ListViewCANmessages.Items[index] = receivedMessage;
                }
                else
                {
                    if (~index == ListViewCANmessages.Items.Count)
                    {
                        receivedMessage.Count++;
                        ListViewCANmessages.Items.Add(receivedMessage);
                    }
                    else
                    {
                        receivedMessage.Count++;
                        ListViewCANmessages.Items.Insert(~index, receivedMessage);
                    }
                }
            });
        }

0 个答案:

没有答案