C# EnableRaisingEvents是否可以在应用程序启动时已在运行的进程上使用?

C# EnableRaisingEvents是否可以在应用程序启动时已在运行的进程上使用?,c#,winforms,C#,Winforms,目前,我有一个程序可以启动另一个应用程序,并使用以下代码监视该应用程序以保持其运行: System.Diagnostics.Process startProgram = System.Diagnostics.Process.Start("program.exe", String.Format(Program.ConnectionArg)); startProgram.EnableRaisingEvents = true; startProgram.SynchronizingObject

目前,我有一个程序可以启动另一个应用程序,并使用以下代码监视该应用程序以保持其运行:

System.Diagnostics.Process startProgram =
    System.Diagnostics.Process.Start("program.exe", String.Format(Program.ConnectionArg));
startProgram.EnableRaisingEvents = true;
startProgram.SynchronizingObject = this;
startProgram.Exited += this.PrematureClose;
然而,我关心的是,如果我的程序以某种方式被终止,会发生什么。当我的程序重新启动时,是否可以使用
EnableRaisingEvents
startProgram.Exit

我有一种感觉,我可能需要放弃我的代码,转而使用某种计时器循环来检查进程是否仍在运行

2016年10月8日编辑:

因此,我尝试了以下代码和基于

它告诉我的是:

无法将类型“System.Diagnostics.Process[]”隐式转换为“System.Diagnostics.Process”


实际上解决了这个问题,却忘了发帖

因此,最大的问题是处理流程对象,因为它被用作using块的一部分。下面的代码是实现这一点的可靠方法。或者,您可以直接定义函数,而不是使用委托

        Process[] processes_array = Process.GetProcessesByName("someprogram");
        foreach (Process some_process in processes_array)
        {
            some_process.EnableRaisingEvents = true;
            some_process.Exited += delegate (object sender, EventArgs args)
            {
                // Do work.
                // DISPOSE PROCESS IF NOT USING IT AFTER THIS!!
            };
        }

当然,如果您的监视器发现应用程序丢失,您可以重新填充该应用程序,因此它将使用raisingevents启用重新启动您是否尝试运行此代码?也许那样你会发现。。。通过抛出异常或杀死可能重复的@PeterDuniho进程来故意破坏应用程序。我去了那个线程并尝试了代码,但它不起作用。“它不起作用”——如果你正确使用它,它会起作用。我自己也测试过基本技术,只是为了确定,我向你保证它确实测试过。“它不起作用”一词是不可起诉的;里面没有有用的信息来指导任何试图帮助的人。如果您需要帮助,请修复您的问题,使其包括一个可靠地再现您遇到的任何问题的良好工具,以及对代码所做的以及您希望它做的事情的精确描述。
        Process[] processes_array = Process.GetProcessesByName("someprogram");
        foreach (Process some_process in processes_array)
        {
            some_process.EnableRaisingEvents = true;
            some_process.Exited += delegate (object sender, EventArgs args)
            {
                // Do work.
                // DISPOSE PROCESS IF NOT USING IT AFTER THIS!!
            };
        }