代码之家  ›  专栏  ›  技术社区  ›  MisterZimbu

在C#/.NET中检测后台进程的结束?

  •  2
  • MisterZimbu  · 技术社区  · 14 年前

    我有一个用C写的进程,它没有任何形式或输出。

    static void Main() {
        MyBackgroundProcess process = new MyBackgroundProcess();
        // begin background process
        process.Start(); 
        // keep application running in the background, run events
        Application.Run();
    }
    

    当应用程序终止时,我需要释放一些资源并做其他事情(只有当运行它的用户注销或者通过任务管理器手动终止时才应该这样做;这个过程永远不会结束)。

    我试过但没用的东西:

    4 回复  |  直到 14 年前
        1
  •  2
  •   Community kfsone    7 年前
        2
  •  2
  •   kbrimington    14 年前

    如果 MyBackgroundProcess 继承 System.Diagnostics.Process ,则会有对您有用的事件。

    Exited 进程对象的事件,以便在进程终止时执行方法。详情请看文档:

    http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx

        3
  •  1
  •   Hans Passant    14 年前

    在Application.Run()调用之后,通过在正常关闭时设置一个持久化标志来解决这个问题,该标志表示“数据已知良好”。总是在启动时检查上一次运行是否有问题(缺少标志),以便清除碎片。

        4
  •  0
  •   Mhmmd    14 年前

    一些伪代码:

    static void Main()
    {
      MyBackgroundProcess backgroundProcess = new MyBackgroundProcess();                
      backgroundProcess.Start(); 
    
      MyMainProcess mainProcess = new MyMainProcess();
      mainProcess.Start();
    
      mainProcess.WaitForExit();
      backgroundProcess.Kill();
    }