积极答复者
在窗体最小化时设定 ListView.VirtualListSize 的时候偶尔会抛 NullReferenceException 异常

问题
-
部分代码如下:
public partial class MainForm : Form { private Random random = new Random(); public MainForm() { InitializeComponent(); PropertyInfo pi = typeof(ListView).GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); pi.SetValue(listView1, true); } private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { e.Item = new ListViewItem(e.ItemIndex.ToString()); } private void timer1_Tick(object sender, EventArgs e) { listView1.BeginUpdate(); listView1.VirtualListSize = random.Next(1000000, 2000000); listView1.EnsureVisible(listView1.VirtualListSize - 1); listView1.EndUpdate(); } }
listView1.VirtualMode 为 true,所有控件事件已关联,当最小化窗体后的某个时刻会有 NullReferenceException 异常抛出。可能和 http://social.msdn.microsoft.com/Forums/en/winforms/thread/f24ffbc5-59f0-4f18-800a-ff2fbbe418e0 有关,我不确定。
运行环境为 .Net 4.5/Win 8。
请问有没有比在设定 VirtualListSize 周围加 try-catch 更好的解决办法?
EFanZh
- 已编辑 EFanZh 2012年12月14日 14:18
答案
-
可能是topitem的index大于VirtualListSize ,你可以修改前先设置topitem
- 已建议为答案 Jason Dot WangModerator 2012年12月18日 4:00
- 已标记为答案 EFanZh 2012年12月18日 8:59
全部回复
-
可能是topitem的index大于VirtualListSize ,你可以修改前先设置topitem
- 已建议为答案 Jason Dot WangModerator 2012年12月18日 4:00
- 已标记为答案 EFanZh 2012年12月18日 8:59