以下是以下代码... Process.Exited
事件处理程序方法未被调用...我还通过断点检查了所有这些。
Process f;
private void button3_Click_1(object sender, EventArgs e)
{
f = new Process();
f.StartInfo.FileName = "tutorial.mp4";
f.EnableRaisingEvents = true;
f.Exited += new EventHandler(f_Exited);
f.Start();
}
private void f_Exited(object sender, System.EventArgs e)
{
//some stuff not important
}
答案 0 :(得分:1)
我认为这是不可能的,因为当您打开这样的文件时,并不能保证进程完全启动。
假设没有为文件类型" .mp4"设置任何标准程序。然后Windows将要求用户选择一个程序来打开文件;但如果用户取消此操作并且根本不选择程序,则不会启动任何进程。因此,我相信在这种情况下,退出的事件根本不会被解雇,因为你不能依赖它。
我能想到的是用适当的命令行参数直接启动播放器,如下所示:
Process f;
private void button3_Click_1(object sender, EventArgs e)
{
f = new Process();
f.StartInfo.FileName = "wmplayer.exe"; // or something other
f.StartInfo.Arguments = @"c:\tutorial.exe"; // as for the wmplayer, you have to specify the whole path.
f.EnableRaisingEvents = true;
f.Exited += new EventHandler(f_Exited);
f.Start();
}
private void f_Exited(object sender, System.EventArgs e)
{
//some stuff not important
}
答案 1 :(得分:0)
我刚刚检查过。当您以这种方式使用Process
时,它不会将Process
对象附加到实际进程。例如,如果您尝试调用Process.WaitForExit()
,则会出现异常。所以当然也不能提出Exited
事件; Process
对象无法知道甚至开始的进程,从不介意它何时退出。
如果你想这样做,你需要启动实际的媒体播放器,为它提供必要的命令行参数或DDE动词来播放特定文件,或者你需要在启动后搜索现有的进程这个过程,寻找你认为刚刚开始的过程。
请注意,只有前一个选项是可靠的。理论上,在后一种情况下,您可能会找到媒体播放器的其他实例(取决于您使用的媒体播放器以及它是否可以作为多个实例运行)。