2015-05-08 29 views
1

我有一個使用DataSet對象的用戶控件。我想實現IDisposable接口,但是用戶控件的設計類已經有以下方法:處理用戶控件中的對象?

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

我該如何正確處置我的DataSet對象?

+1

您可以將設計器生成的'Dispose'方法你的代碼並修改它。 – Zer0

+0

移動它很好,不會破壞任何東西。從#地區清晰可見,警告你不應該改變的部分。 –

回答

2

一旦控制權被處置,你可以調用它。只需訂閱控件的Disposed事件並在裏面放置自己的類。

+0

是否做到了。當我關閉用戶控件所在的窗體時,事件永遠不會發生。 –

+0

你是如何打開表格的? 'ShowDialog'也許?這意味着你的表單沒有處理。內存泄漏警報! –

+0

是與ShowDialog。如何正確處理表單然後?我正在使用控件的OnHandleDestroyed事件來處理對象並且它正在工作。 –

1

安全處理處置DataSet對象最簡單的方法是把它在一個using條款:

using (DataSet ds = new DataSet()) 
{ 
     // Put code that adds stuff to DataSet here. 
     // ... The DataSet will be cleaned up outside the block. 
} 

這樣,您就不必手動配置DataSet對象之後。它將在離開using區塊時處置。

Using (MSDN)

+0

確實。這僅在數據集很短時間內有效。如果它通過方法保存在內存中,這將不起作用。 –

+0

@PatrickHofman你說得對,這不是處理內存中應該保持更長時間的數據集時的最佳解決方案。但它可能是一個有用的解決方案。 – Max

+0

你是完全正確的。 –

2

重寫Dispose方法不是Component Designer generated code

的一部分,所以你可以修改它

protected override void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     if (components != null) 
      components.Dispose(); 
     System.Diagnostics.Debug.WriteLine("Dispose DataSet Here"); 
    } 
    base.Dispose(disposing); 
}