【问题标题】:using statement for background worker后台工作人员使用语句
【发布时间】:2011-08-10 01:30:51
【问题描述】:

我一直在查看几个后台工作人员的示例,并且遇到了与此类似的代码

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

我没有像这样在我的代码中使用“使用”语句。我在使用 Code Rush 试用版时遇到了类似的情况,这让我回到了这段代码并质疑我是否应该这样做。请帮助我了解这是否/为什么是最佳做法。谢谢。

【问题讨论】:

    标签: c# backgroundworker using


    【解决方案1】:

    其实BackgroundWorker是不需要处理的,见here。所以不需要using子句

    【讨论】:

      【解决方案2】:

      像这样使用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

      【讨论】:

        【解决方案3】:

        using 语句定义了一个范围之外的对象将被释放。因此,这只是自动处理资源的约定。来自MSDN

        using 语句允许程序员指定什么时候对象 使用资源应该释放它们。提供给使用对象 语句必须实现 IDisposable 接口。这个界面 提供 Dispose 方法,该方法应该释放对象的 资源。

        在您的场景中完全可以接受。

        【讨论】:

          【解决方案4】:

          using 语句用 try/catch 块包围您的代码。但不是所有东西都可以使用 using 语句;只有实现 Dispose() 的对象才可以。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-04-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多