2011-08-09 54 views
5

我一直在翻閱backgroundworkers的幾個例子,我遇到的代碼看起來類似於此using語句後臺工作

public class MyClass 
{ 
    public MyClass() 
    { 
    using(BackgroundWorker _Worker = new BackgroundWorker { WorkerReportsProgress = true}) 
    { 
     _Worker.DoWork += (s, args) => 
     { 
     ... 
     }; 
    } 
    _Worker.RunWorkerAsync(); 
    } 
} 

我還沒有被使用的「使用」 statment在我的代碼是這樣跑了。在使用Code Rush試驗時,我遇到了類似的情況,這讓我回到了這段代碼,並質疑我是否應該這樣做。請幫助我瞭解是否/爲什麼這將是最佳做法。謝謝。

回答

1

實際上BackgroundWorker不需要處理,見here。所以沒有必要有using條款

1

使用using這樣的關鍵字可以簡單地爲您處理處置。沒有它,你會不斷地寫try/catch/finally塊,以確保實現IDisposable的對象正確處置。

還要注意的是,你可以把多個聲明在using語句,如果你有需要處理多個對象:

using (Font font3 = new Font("Arial", 10.0f), 
      font4 = new Font("Arial", 10.0f)) 
{ 
    // Use font3 and font4. 
} 

這裏就可以了MSDN documentation

1

using語句定義了一個範圍,該範圍以外的對象將被丟棄。所以這只是資源自動處理的慣例。從MSDN

using語句允許程序員指定當對象 利用資源應該釋放他們。提供給使用 語句的對象必須實現IDisposable接口。此接口 提供了Dispose方法,該方法應釋放對象的 資源。

在您的情況下,這是完全可以接受的。

1

using語句用try/catch塊代替你的代碼。但不是所有的東西都可以使用using語句;只有實現Dispose()的對象纔可以。