点击'打开模态窗口'按[主窗体]中的按钮,显示 使用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 方法
请下载我的示例代码以重现该异常。我该如何解决这个异常?任何建议将不胜感激。
答案 0 :(得分:0)
我下载了代码,这似乎是objeclistview的一个bug。我无法修复它,但我有一个解决方法来解决您的问题:您可以异步显示ShowDialog(),如下所示:
this.BeginInvoke(new Action(() => {
var myMsgBox = new MyMsgBox("Must be 0");
myMsgBox.ShowDialog();
}));