CA1001:在 ViewModel 中实施 Idisposable

CA1001 : Implement Idisposable in a ViewModel

  public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {

                if (processFileBackgroundWorker != null)
                {
                    processFileBackgroundWorker.Dispose();
                    processFileBackgroundWorker = null;
                }
            }
        }

我在我的视图模型中使用后台工作程序,我在 fxcop 中收到 CA1001 错误。我明白我需要继承Idisposable,并实现上面的接口。我只是好奇它是如何工作的,如果只是在我的 class 中任意添加这段代码就可以完成任何事情。我尝试设置一个断点,但此代码从未被调用或使用过,我将不胜感激有关如何正确实施它的任何指导。

如果 fxcop 把勺子砸在托盘上并要求 IDisposable,并且摆脱 fxcop 不是一个选择,我猜你要纳税了。

在这种特殊情况下有点傻,因为 IDisposable 用于在对象超出 using 块或 try/[ 的范围时处理非托管资源=14=],并且视图模型不会以这种方式超出范围。所以在正常的视图模型使用中,没有调用 Dispose()

但您确实经常在程序退出前丢弃它们( 程序退出时,没有人关心是否有任何东西被处理掉——它们都直接进入垃圾箱)。我会实现 IDisposable,让它像你所做的那样正确处理 BackgroundWorker,如果你的代码中有一点丢弃了该视图模型的实例,我会明确调用 Dispose() 就可以了。你不需要 IDisposable ,但它是无害的。