代码之家  ›  专栏  ›  技术社区  ›  radbyx Matt

如何正确处理后台人员

  •  6
  • radbyx Matt  · 技术社区  · 15 年前

    我有一个运行的Windows服务 BackgroundWorker 的,我想知道当我停止Windows服务时是否做了正确的事情。

    1. BackgroundWorker1_DoWork 方法完成(我现在有一个while循环,正在执行一些任务)
    2. 设置保存对 ,至 null

    Dispose() 我需要调用的方法(与 Timer 班级有 Timer.Dispose();

    4 回复  |  直到 15 年前
        1
  •  1
  •   Mark Brackett    15 年前

    也就是说,有一个类级别的后台工作进程在e服务类处理时被处理是正常的。没必要,但干净总是好的。

        2
  •  1
  •   adrianbanks    15 年前

    BackgroundWorker IDisposable ,你应该把它处理完。

    OnStop 方法 ServiceBase 背景工作者 你需要它来停止(使用 CancelAsync ,包括在其中运行的所有线程。

    顶上

        3
  •  -1
  •   Tim Lloyd    15 年前

    正确的方法是让工作线程干净利落地完成它正在做的事情。

    这通常可以通过一个共享标志\waithandle\来完成,这个标志可以用来与工作线程(从主线程)通信,使它应该退出它正在做的事情,这自然会导致工作线程从堆栈中洗牌并蒸发。工作线程应该定期检查“标志”以确定它是否需要退出(例如,在您的循环中),并且主服务线程可以在需要关闭时发出标志信号。然后,主线程等待工作线程退出,例如通过调用工作线程上的join。

        4
  •  -1
  •   rossisdead    15 年前

    BackgroundWorkers还有一个CancelAsync方法,可以将CancellationPending属性更改为true。你可以在DoWork函数中检查它,这样你就可以阻止它运行。