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不在响应消息

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

    2014年3月29日 7:29

全部回复

  • Hi,

    仅从你字面上的解释和出现的现象来看问题应该是由于数据更新的过于频繁导致的UI刷新的问题,你可以试两个方面,一个是双缓冲设置成true,另外一个是试试把UI和数据处理用多线程分开,嗯,也不叫分开吧,就是在winform里面加backgroundworker试试,这里是一个英文的backgroundworker的文献,你可以参看里面的代码 http://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners

    另外其实具体问题要具体分析的,你现有的代码基本没有涉及到关键点,别人也很难帮到你,你可以先自己朝着我说的两个方面试一试



    Barry Wang
    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年3月31日 6:11
    版主