如何解决如何以编程方式打开应用程序并检查其关闭时间?
| 我已经能够使用Winforms应用程序通过以下方式打开另一个Winforms应用程序: Rhino4.Application oRhino =(Rhino4.Application)Activator.CreateInstance(Type.GetTypeFromProgID(\“ Rhino4.Application \”))); 但是,如何检查它是否关闭?是否可以创建一个在用户关闭应用程序时将触发的事件? 编辑Process[] pr = Process.GetProcessesByName(\"Rhino4\");
for (int i = 0; i < pr.Length; i++)
{
if (pr[i].MainWindowTitle != null)
{
if (pr[i].MainWindowTitle.Length > 4)
{
if (pr[i].MainWindowTitle.Substring(0,4) == \"wall\")
{
pr[i].Exited += new EventHandler(caseInfoMenu_Exited);
}
}
}
}
void caseInfoMenu_Exited(object sender,EventArgs e)
{
MessageBox.Show(\"Window closed\");
}
我已设法使用此代码确定过程。但是,当我关闭程序时,退出事件不会触发。
解决方法
它可能不是最优雅的解决方案,但是您可以间接地通过检查该过程是否存在来执行此操作,然后重复执行此操作。当然,如果您还没有处理过程的话。
void checkProcess()
{
Process[] processes = Process.GetProcessesByName(\"NameOfProcess\");
if (processes.Length == 0)
{
// No such process
}
else
{
foreach (Process proc in processes)
{
// do something with proc
}
}
}
编辑:阅读阿卜杜勒答案中的帖子以及您自己的问题后,对此会有一些想法。这绝不是答案,但也许可以帮助您完成任务。
首先,Activator.CreateInstance在您赋予它的对象类型上调用最合适的构造函数,并返回该对象的句柄。它确实创建线程/进程本身,因此不了解线程/进程。您将在列表中看到的(9)进程可能是由Rheno4类本身创建的。这里有一个讨论。
其次,根据msdn,在为Exited事件创建进程以使其正常运行时,应将EnableRaisingEvents属性设置为true。这让我想知道在流程创建后附加事件时会发生什么?
您当然可以在调用CreateInstance之前和之后迭代所有匹配的进程,以提取已创建的Rheno4的所有新实例。但这远非防弹解决方案,风险是您要获取别人创建的进程,或者并非所有进程都被收回(以防创建另一个对象时出现延迟)。但是,根据您的需要,这可能适用。
另一个想法。从GetProcessesByName返回的进程具有丰富的属性集。也许您可以查看这些内容并为返回的流程找到一个共同的分母。我将要研究的是:线程,StartInfo,MainModule。
, 赶上Exited
事件怎么办
myProcess.Exited += new EventHandler(myProcess_Exited);
private void myProcess_Exited(object sender,System.EventArgs e)
{
eventHandled = true;
Console.WriteLine(\"Exit time: {0}\\r\\n\" +
\"Exit code: {1}\\r\\nElapsed time: {2}\",myProcess.ExitTime,myProcess.ExitCode,elapsedTime);
}
来源msdn。
, 如果要在关闭后重新启动应用程序,则:-
我认为您需要破解Windows服务,该服务将继续检查进程的运行情况,如果进程已关闭,请再次启动应用程序
就事件而言,Windows App中有\“ Closing \”和\“ Close \”事件,它们在用户关闭应用程序时触发。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。