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

时间:2017-06-27 07:16:26

标签: objectlistview objectdisposedexception

点击'打开模态窗口'按[主窗体]中的按钮,显示 使用ObjectListView组件使用数据列表构建的[子表单]。

当我点击"年龄"用于编辑它的列并将单元格中的值更改为非零值,然后单击ObjectListView组件的空白(如果我按Enter键,异常将不会出现),它会弹出一条消息。我将此消息留在所有打开的窗口前面,等待10秒钟以便应用程序超时。那时,一个例外表明:

  

无法访问已处置的对象。对象名称:' 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);

我的声誉太低,无法上传更多链接,因此我将代码发布到OneDrive。 示例代码和解决方案如下:

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

我尝试在我的解决方案中添加ObjectListView的源代码,并且错误发生在v2.9.0的源代码中 GetHeaderControl 方法

请下载我的示例代码以重现该异常。我该如何解决这个异常?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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