2012-06-02 111 views
2

在DoWork事件中完成处理工作后,是否有必要处理掉后台工作人员,或者作为管理对象,最终会自动处理?处理后台工作人员

此前,我在timer_elapsed内执行一些功能,即每三十秒执行一次任务。 现在,我在BackGround Worker的DoWork事件中执行相同的处理。如何循环这个bgWorker事件每30秒后执行(说)bgworker.RunWorkerAsync();

如果我把这bgWorker.RunWorkerAsync()独立timer_elapsed,我应该如何处理它在每个计时器过去后?

+0

如果你要再次需要它,为什么要处置它? – Aybe

+0

你为什么要使用后台工作者?一个计时器似乎更适合触发基于时间间隔的操作 – BrokenGlass

+0

@Aybe:我担心的是计时器应该无限次地运行,即每隔30秒左右,直到我正在使用的“windows服务”关闭为止。那么,我在哪里处置这个? – user1240679

回答

3

是否有必要处置掉后,后台工作...

号BackgroundWorker的确实实现了IDisposable接口,但只有从Component继承毯子功能。它没有任何用处。

如果我在timer_elapsed

把这个bgWorker.RunWorkerAsync()可疑,如果你应该做的,在所有。但是,如果你这样做,每次只需创建一个新的Backgroundworker。

Backgroundworker是一个相对'轻'的对象,它没有资源。该线程是从ThreadPool借用的。

如果您是校长的支持者,您可以在创建新校长之前调用旧校长的Dispose()。但它不会有太大的区别。

+0

为每个背景创建一个新的线程'timer_elapsed'对我来说看起来像是一种矫枉过正,但是我认为如果资源占用非常低的话,这很好。 – user1240679

+0

正如Henk所说,你实际上并没有创建线程(通常),只是从线程池中借用它们。 –

+0

创建一个Bgw通常不会创建一个新的线程。 –