C# 关于kill事件C的处理#

C# 关于kill事件C的处理#,c#,wpf,C#,Wpf,我正在使用C#WPF。 我有一个用Start()命令运行它们的进程列表。 我想知道用户何时退出进程并捕获事件。 我所尝试的: *myProcess是进程对象。 问题是在Start()命令关闭应用程序并退出myProcess\u后立即调用的回调。 我的错误在哪里?这种行为的唯一原因是,您启动的exe在启动后立即关闭或崩溃。例如,如果exe是一个没有任何用户输入或其他内容的控制台应用程序。用Notepad.exe试试你的代码,你会发现它是有效的 看看这段IronPython代码,它主要是作为应

我正在使用C#WPF。
我有一个用
Start()
命令运行它们的进程列表。
我想知道用户何时退出进程并捕获事件。
我所尝试的:

*myProcess是进程对象。
问题是在
Start()
命令关闭应用程序并退出
myProcess\u后立即调用的回调。

我的错误在哪里?

这种行为的唯一原因是,您启动的exe在启动后立即关闭或崩溃。例如,如果exe是一个没有任何用户输入或其他内容的
控制台
应用程序。用
Notepad.exe
试试你的代码,你会发现它是有效的

看看这段
IronPython
代码,它主要是作为应用程序的.net代码(只是为了便于测试):

从System.Diagnostics导入过程

def on_exit(s, e):
    print ('Exited')

process = Process()
process.StartInfo.FileName = "C:\\Windows\\System32\\notepad.exe"
process.EnableRaisingEvents = True
process.Exited += on_exit;
process.Start()
如果我关闭记事本,则调用Exit

编辑

如果你想检测哪个应用程序被关闭/退出,只需将你的
发送者
对象设置为
进程
,并通过
StartInfo
访问它的
文件名
。例如:

private void OnExited(object sender, EventArgs, e)
{
    var process = (sender as Process);
    Console.WriteLine(process.StartInfo.FileName);
}
希望这有帮助

myProcess.StartInfo.FileName = fileName;
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
myProcess.Start();
myProcess.WaitForExit();
或者


嗨,我正在用你说的记事本再试一次。应用程序实际上并没有立即关闭,但当我关闭进程时,回调不会被称为dupdate:现在它的工作:)谢谢!。。我怎么知道在回调中关闭的应用程序名?@MikeBrown我为您添加了一个示例。我想他会在同一线程中启动一个进程列表,而
WaitForExit
不可用。谢谢。我如何知道在回调中关闭的应用程序名?我认为问题的另一部分是命令行应用程序。启动记事本和您的代码,它应该都工作。如果这样做有效,那么您可以排除命令行应用程序的故障。在退出时,甚至可以将对象发送者强制转换回进程。进程p=发送方作为进程;
myProcess.StartInfo.FileName = fileName;
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
myProcess.Start();
myProcess.WaitForExit();
myProcess.WaitForExit(timeout);