none
在窗体最小化时设定 ListView.VirtualListSize 的时候偶尔会抛 NullReferenceException 异常 RRS feed

  • 问题

  • 部分代码如下:

    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
    2012年12月14日 14:18

答案

全部回复