调用两次导致:“protected override void Dispose”

时间:2010-07-12 23:14:51

标签: c# dispose invoke

我有一个函数可以帮助我关闭表单而不会出现交叉错误:

    public void OutsideClose(long Id)
    {
        MessageBox.Show("");
        if (InvokeRequired)
        {
            Invoke(new Action<long>(OutsideClose), Id);
        }
        else
        {
            var asdf = ListForm.Find(a => a.Id == Id);
            if (asdf != null)
            {
                asdf.Close();
            }
        }
    }

出于某种原因,如果我调用此调用两次,而不是第二次关闭该表单,则转到此dispose方法:

   protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

我希望表单关闭,并且不知道发生了什么......

2 个答案:

答案 0 :(得分:1)

asdf.Close应该调用asdf.Dispose。

答案 1 :(得分:0)

第二次调用方法时,不应找到带有id的表单。

        var asdf = ListForm.Find(a => a.Id == Id);
        if (asdf != null)
        {
            ListForm.Remove(asdf); //or whatever you need to do to remove it...
            asdf.Close();
        }