2011-08-09 11 views
5

he estado buscando durante varios ejemplos de backgroundworkers y me encontré con código que es similar a estoinstrucción using para el fondo trabajador

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

no he estado usando el "uso" DECLARACIÓN en mi código como este. Me encontré con algo similar al usar la prueba Code Rush, que me hizo volver a este código y preguntar si debería estar haciendo esto o no. Por favor, ayúdame a entender si/por qué esta sería la mejor práctica. Gracias.

Respuesta

1

En realidad BackgroundWorker no necesita ser eliminado, ver here. Por lo tanto, no es necesario tener la using cláusula

1

Utilizando la palabra clave using así simplemente se encarga de disponer de usted. Sin él, estaría constantemente escribiendo try/catch/finally bloques para asegurarse de que los objetos que implementan IDisposable se dispusieran correctamente.

También tenga en cuenta que se pueden poner varias declaraciones en una instrucción using, si tiene varios objetos que necesitan ser eliminados:

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

Aquí está la MSDN documentation en él.

1

La declaración using define un ámbito fuera del cual se eliminarán los objetos. Por lo tanto, es solo una convención mediante la cual los recursos se eliminan automáticamente. De MSDN,

La instrucción using permite al programador especificar que los objetos cuando usar los recursos deben liberarlos. El objeto proporcionado a la instrucción utilizando debe implementar la interfaz IDisposable. Esta interfaz proporciona el método Dispose, que debe liberar los recursos del objeto.

Es perfectamente aceptable en su situación.

1

La instrucción using tiene lugar al rodear su código con un bloque try/catch. Pero no todo puede usar la declaración de uso; solo los objetos que implementan Dispose() pueden.

Cuestiones relacionadas