2011-08-09 28 views
5

Tôi đã được nhìn qua một vài ví dụ về backgroundworkers và tôi chạy qua mã mà trông tương tự như saubằng tuyên bố cho công nhân nền

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

tôi đã không được sử dụng "sử dụng" Statment trong mã của tôi như thế này. Tôi chạy qua một cái gì đó tương tự trong khi sử dụng thử nghiệm Mã Rush, mà làm cho tôi quay trở lại mã này và câu hỏi nếu tôi nên làm điều này hay không. Xin hãy giúp tôi hiểu nếu/tại sao điều này sẽ là thực hành tốt nhất. Cảm ơn.

Trả lời

1

Trên thực tế BackgroundWorker không cần phải được xử lý, hãy xem here. Vì vậy, không cần phải có mệnh đề using

1

Sử dụng từ khóa using như thế chỉ cần xử lý vứt bỏ cho bạn. Nếu không có nó, bạn sẽ liên tục viết các khối try/catch/finally để đảm bảo các đối tượng triển khai IDisposable được xử lý đúng cách.

Cũng lưu ý rằng bạn có thể đặt nhiều tờ khai trong một tuyên bố sử dụng, nếu bạn có nhiều đối tượng mà cần phải được xử lý:

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

Đây là MSDN documentation trên đó.

1

Tuyên bố using xác định phạm vi bên ngoài đối tượng sẽ được xử lý. Vì vậy, nó chỉ là một quy ước mà theo đó các nguồn lực được xử lý tự động. Từ MSDN,

Tuyên bố sử dụng cho phép lập trình viên chỉ định khi các đối tượng sử dụng sử dụng tài nguyên. Đối tượng được cung cấp cho câu lệnh phải triển khai giao diện IDisposable. Giao diện này cung cấp phương thức Vứt bỏ, nên giải phóng tài nguyên của đối tượng.

Điều này hoàn toàn có thể chấp nhận được trong trường hợp của bạn.

1

Tuyên bố sử dụng diễn ra xung quanh mã của bạn với khối try/catch. Nhưng không phải mọi thứ đều có thể sử dụng câu lệnh sử dụng; chỉ các đối tượng thực hiện Dispose() mới có thể.