正确的方式来处置一个BackgroundWorker的 [英] Proper way to Dispose of a BackGroundWorker

查看:306
本文介绍了正确的方式来处置一个BackgroundWorker的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这将是一个适当的方式处理一个BackgroundWorker的?我不知道这是否是necesary调用.Dispose之前删除的事件()。同时呼吁.Dispose()的RunWorkerCompleted代表内确定这样做?

 公共无效RunProcessAsync(日期时间dumpDate)
{
    BackgroundWorker的工作人员=新的BackgroundWorker();
    worker.RunWorkerCompleted + =新RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.DoWork + =新DoWorkEventHandler(worker_DoWork);
    worker.RunWorkerAsync(dumpDate);
}

无效worker_DoWork(对象发件人,DoWorkEventArgs E)
{
    //做的工作在这里
}

无效worker_RunWorkerCompleted(对象发件人,RunWorkerCompletedEventArgs E)
{
    BackgroundWorker的工人=发件人为BackgroundWorker的;
    worker.RunWorkerCompleted  -  =新RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.DoWork  -  =新DoWorkEventHandler(worker_DoWork);
    worker.Dispose();
}
 

解决方案

BackgroundWorker的源于组件。组件实现了IDisposable接口。这反过来又使得BackgroundWorker的继承Dispose()方法。

从Component派生是一个方便的Windows Forms程序员来说,他们可以从工具箱中拖放BGW到窗体。一般组件有些可能有事要处理。 Windows窗体设计器会自动处理这个,看在Designer.cs文件的形式对部件领域。它的自动生成的Dispose()方法调用Dispose()方法的所有组件。

不过,BackgroundWorker的实际上没有需要处理的任何成员。它不会覆盖Dispose()方法。它的基本实现,Component.Dispose(),只可以确保部件从部件集合中删除。并提高了处置事件。但不以其他方式处置任何东西。

长话短说:如果你放弃了BGW窗体上,然后一切都采取自动处理,你没有帮助。如果你没有把它在窗体上那么它是不是一个组件集合的元素,并没有什么需要做的事情。

你不必调用Dispose()的。

Would this be a proper way to dispose of a BackGroundWorker? I'm not sure if it is necesary to remove the events before calling .Dispose(). Also is calling .Dispose() inside the RunWorkerCompleted delegate ok to do?

public void RunProcessAsync(DateTime dumpDate)
{
    BackgroundWorker worker = new BackgroundWorker();
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);
    worker.RunWorkerAsync(dumpDate);
}

void worker_DoWork(object sender, DoWorkEventArgs e)
{
    // Do Work here
}

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    worker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.DoWork -= new DoWorkEventHandler(worker_DoWork);
    worker.Dispose();
}

解决方案

BackgroundWorker derives from Component. Component implements the IDisposable interface. That in turn makes BackgroundWorker inherit the Dispose() method.

Deriving from Component is a convenience for Windows Forms programmers, they can drop a BGW from the toolbox onto a form. Components in general are somewhat likely to have something to dispose. The Windows Forms designer takes care of this automatically, look in the Designer.cs file for a Form for the "components" field. Its auto-generated Dispose() method calls the Dispose() method for all components.

However, BackgroundWorker doesn't actually have any member that requires disposing. It doesn't override Dispose(). Its base implementation, Component.Dispose(), only makes sure that the component is removed from the "components" collection. And raise the Disposed event. But doesn't otherwise dispose anything.

Long story short: if you dropped a BGW on a form then everything is taken care of automatically, you don't have to help. If you didn't drop it on a form then it isn't an element in a components collection and nothing needs to be done.

You don't have to call Dispose().

这篇关于正确的方式来处置一个BackgroundWorker的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆