2012-05-18 65 views
1

我試圖根據微軟的源代碼分析解決我的所有項目的警告(CA:XXXXX)CA2000:失去範圍和Form.Show()之前釋放對象

一個警告的是「CA2000:配置對象失去範圍」

我的代碼之前:

Private sub Foo() 
    Dim O As New Form1() 
    O.Show() 
End Sub 

Visual Studio中說,該物體O不是一次性的,在這種情況下,我不能用使用關鍵字,因爲我會End Using後失去了目標O :

Private sub Foo() 
    Using O As New Form1() 
     O.Show() 'The form will open then close !!! 
    End Using 
End Sub 

的形式,然後會打開和關閉

如何獲得在這樣的情況下與CA2000騎,我並不需要忽略,我想解決和修復。

謝謝。

回答

1

我不需要忽視,我想解決並修復。

在這個特定的情況下,這實際上是一個錯誤的警告。在這種特定情況下,您不希望「解決並修復」此消息,因爲您希望該對象在本地範圍的末尾「活動」。

如果您在該範圍內的對象上調用Dispose,在這種情況下,您將(始終)關閉表單。

+0

非常感謝,你需要告訴微軟不是我:)我認爲有更多的標準解決方案,特別是我面臨與我的項目,非常大,很多圖形用戶界面巨大的記憶。 – Sameh

+0

@Sameh CA2000是一種常見的提供錯誤結果的方法,因爲無法知道IDisposable是否必須處置。這就是爲什麼它很容易被忽略,爲什麼它是一個代碼分析警告,而不是一個編譯器警告...... –

+0

從我的經驗來看,除非你有理由,否則總是使用標準,不要忽略警告。標準= 99%標準+ 1%例外,只有有經驗的人應該使用1%知道原因 – Sameh

0

ShowDialog怎麼樣?

Private sub Foo() 
    Using O As New Form1() 
     O.ShowDialog() 
    End Using 
End Sub 

我已經關閉之後將處置Form1所有資源。

+0

在這種情況下是的,但並不總是你可以使用showdialog,我在問一個通用的問題,ShowDialog阻止你的應用程序。 – Sameh

相關問題