读书人

listview在virtual模式时的有关问题

发布时间: 2012-11-03 10:57:44 作者: rapoo

listview在virtual模式时的问题
感觉virtual模式是这样的和一个数据域绑定,显示范围是virtualsize个项目,实际并不加载到界面,当需要显示时,加载要显示的项目

1、上述理解正确否?
2、retrievevirtualitem事件处理函数是发生在需要显示未加载进界面项目的时候吧?是UI线程执行么?
3、我的程序设计,后台线程tbk动态修改一个list实例对象(这个list实例对象即为listview绑定的数据域),virtualsize=list.count动态变化,使用monitor对后台tbk线程和主线程(ui线程)进行同步

代码:

后台线程(循环执行,周期性的更新list的内容)
monitor.enter(list);
//修改list
先list.clear();
后list.add()
再设置控件的virtualsize=list.count
monitor.exit(list);

主线程
在void OnRetriveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
monitor.enter(list);
e.Item = list[e.ItemIndex];
monitor.exit(list);
}

问题:
【1】这样可以实现ui线程和tbk线程对共享资源list的互斥访问么?
【2】OnRetriveVirtualItem是在主线程执行么
【3】OnRetriveVirtualItem有索引超出范围的异常报出,不知是何原因

[解决办法]
1 是
2 是
1 没看到哪里有线程安全的代码
2 是
3 线程安全问题

读书人网 >.NET Framework

热点推荐