无法访问 ObjectListView 的 CellEditFinished 事件弹出消息中已处置的对象

Can not access disposed object in CellEditFinished event popup messages of ObjectListView

当我点击 [Main form] 中的 'Open Modal Window' 按钮时,它显示 使用 ObjectListView 组件用数据列表构建的 [subform]。

当我点击"Age"列进行编辑,将单元格中的值改为非零值,然后点击ObjectListView组件的空白处(如果我按回车,异常不会出来),它会弹出一条消息。我在所有打开的 windows 前面留下了这条消息,等待 10 秒应用程序超时。当时异常显示:

Cannot access a disposed object. Object name: 'ObjectListView'.

代码如下:

private void button1_Click(object sender, EventArgs e)
{
    modalForm = new Form2();
    StartTimeOutTimer();
    var result = modalForm.ShowDialog(this);
}

private void ProcessTimeOut()
{
    timer1.Stop();
    seconds = 0;
    List<Form> openForms = Application.OpenForms.Cast<Form>().Where(frm => !string.Equals(frm.Name, "Form1") && !frm.IsDisposed).ToList();
    for (var i = openForms.Count - 1; i >= 0; i--)
    {
        openForms[i].Dispose();
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    seconds++;
    if (seconds == 10)
    {
        ProcessTimeOut();
    }
}

异常出现在这一行:

var result = modalForm.ShowDialog(this);

我的声誉太低,无法上传更多链接,所以我 post 将代码添加到 OneDrive。 示例代码和解决方案在这里:

https://1drv.ms/u/s!AmQYEYkCV6gqgw6iPMVFPBKlSx1V

我尝试在我的解决方案中加入ObjectListView的源码,错误出现在源码中的GetHeaderControl方法v2.9.0

请下载我的示例代码以重现异常。如何修复此异常?任何建议将不胜感激。

我下载了代码,它似乎是 objeclistview 的一个错误。我无法修复它,但我有一个解决方法来解决您的问题:您可以异步 ShowDialog(),如下所示:

 this.BeginInvoke(new Action(() => {
         var myMsgBox = new MyMsgBox("Must be 0");
         myMsgBox.ShowDialog();
      }));