0

我有一个主窗体,在这个主窗体上我添加了一个用户控件,如下所示。

objCustomer = new Customer();
objCustomer.Top = this.Top;
objCustomer.Left = this.Left;
this.BeginInvoke((MethodInvoker)delegate { this.Controls.Add(objCustomer); });

现在,在某些事件中,我必须卸载此控件并加载其他控件。

if (objCustomer != null)
{
this.Invoke((MethodInvoker)delegate { this.Controls.Remove(objCustomer); });
this.Invoke((MethodInvoker)delegate { objCustomer.Dispose(); });
}
objEmployee = new Employee();
objEmployee.Top = this.Top;
objEmployee.Left = this.Left;

this.BeginInvoke((MethodInvoker)delegate { this.Controls.Add(objEmployee); });

现在,在客户Dispose功能上,我有一些例程要求从其他系统注销。

protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            Common.Log.LogEvent("Customer", "DisposedCall");
            LogOffServer();

            components.Dispose();

        }
        base.Dispose(disposing);
    }

我相信这个 Dispose 事件没有调用。

请帮我。

谢谢

4

1 回答 1

1

假设最后一个Dispose()方法用于您的 Form,如果您的条件块没有被执行,那是因为 Winform 上的所有控件都在Dispose()调用 Form 的方法之前被释放。这意味着它components != null是假的(因为所有components都已经被处置)并且条件评估为假。

Winform 事件生命周期

于 2013-02-01T18:31:32.913 回答