none
winform下引用wpf的datagrid 有时引起datagrid卡死 RRS feed

  • 问题

  • 1:我是在framework4.0winform下编写一个组件,这个组件有菜单命令和列表,其中列表是用

    ElementHost组件添加了wpf下的datagrid组件实现的,代码如下:

               mAlarmView = new DataGrid();
                mAlarmView.ItemsSource = mDisplayAlarmRowList;
                AlarmHost.Child = mAlarmView;
                mAlarmView.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
                mAlarmView.AutoGenerateColumns = false;
                mAlarmView.IsReadOnly = true;
                mAlarmView.CanUserResizeRows = false;
                mAlarmView.Loaded += AlarmViewLoaded;
                mAlarmView.PreviewMouseLeftButtonDown += AlarmViewPreviewMouseLeftButtonDown;

    其中mDisplayAlarmRowList 是ObservableCollection<AlarmItem>类型

    2:AlarmItem是行的数据类,它实现了INotifyPropertyChanged接口


    3:列是动态添加的并且进行了样式绑定,这样运行起来的话,只要修改数据类和对行数据的属性修改就可以

    实现列表的修改和行样式的修改

    问题:

    我运行的场景是列表数据在后台不断地增加删除,我打开画面时有时候datagrid框会卡死,不进行任何数据显示;

    大多数情况下则没有问题,当卡死的时候这个组件的菜单还是可以用的,但是点击datagrid框则没有任何反应,好像接受不到

    windows消息一样;

    如果我打开一个包含datagrid的画面A,A显示正常,界面正常刷新,这时我再打开画面B,如果B出现卡死情况的话,则A

    也会出现卡死的情况,A和B用的是同一个数据源.

    请问一下这可能是什么原因造成的,我感觉就像winform向datarid发送消息的时候出现了问题,datagrid不在响应消息

    这个问题困扰我很长时间了,请各位大牛帮我分析一下可能是什么原因,多谢!

    请版主帮忙看一下,多谢!



    • 已编辑 zhanglisaw 2014年3月30日 8:16
    • 已移动 Caillen 2014年3月31日 10:00
    2014年3月29日 10:54

全部回复

  • 有代码吗?提供一个Sample吧,这样别人可以很容易的重现这个问题。否则还要尝试着去重现。你可以把代码传到一个可以下载的地方。
    2014年3月31日 10:05
  • 你好,

    根据你的描述,我在本地创建了一个项目来模拟这个问题。我这边运行OK的。我猜测这个问题产生因为在后台更新的数据量很大导致的。建议后台更新时放在一个新线程中进行,更新完成后,再同步到UI线程上。关于WPF中线程的内容,请参考:

    http://msdn.microsoft.com/en-us/library/ms741870(v=vs.110).aspx

    如果上述回复不能帮助你解决这个问题,建议提供一个Sample,这样便于我们一起分析问题。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年4月1日 2:19
    版主