2013-02-01 41 views
0

我有一個主窗體,並且在這個主窗體上我添加了一個像下面這樣的用戶控件。在c#winforms中不調用BeginInvoke方法調用用戶控件的功能

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事件沒有調用。

請幫幫我。

謝謝

回答

1

假設最後Dispose()方法是你的表,如果不執行你的條件塊那是因爲被稱爲窗體的Dispose()方法之前,在WinForm的所有控件設置。這意味着components != null是錯誤的(因爲所有的components已經處理完畢)並且條件評估爲false。

Winform Event Lifecycle

+0

Dispose方法用於UserControl。讓我檢查一下這個情況。 – Dips

+0

你是對的。我現在解決了它。謝謝 – Dips

+0

很高興我能幫上忙。 – jeuton

相關問題