c# - 处理终止事件 C#

标签 c# wpf

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

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

*myProcess 是 Process 对象。
问题是在 Start() 命令后立即关闭应用程序并调用 myProcess_Exited 回调。
我的错误在哪里?

最佳答案

该行为的唯一原因是,您启动的 exe 在启动后直接关闭或崩溃。例如,如果 exe 是一个 console 应用程序,它没有任何用户输入或其他东西。使用 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。

编辑

如果您想检测哪个应用已关闭/退出,只需将您的sender 对象放入Process 并通过 访问它的FileName >开始信息。例如:

private void OnExited(object sender, EventArgs, e)
{
    var process = (sender as Process);
    Console.WriteLine(process.StartInfo.FileName);
}

希望这对您有所帮助。

关于c# - 处理终止事件 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272927/

相关文章:

c# - MVVM:将 ContentControl 绑定(bind)到 CheckBox

wpf - 将自定义按钮添加到现有的 MessageBox

c# - WPF 将字符串传递到新窗口

.net - 多重触发的否定或非条件元素

c# - 从客户端检测到具有潜在危险的 Request.QueryString 值

c# - Controller Action 命名约定

c# - Firefox Webdriver 没有数据可用于编码 437

c# - Orderby Linq 的性能

c# - C# 中的可查询性和延迟加载是否模糊了数据访问与业务逻辑的界限?

wpf - 仅将默认 ControlTemplate 应用于一个控件