我如何知道外部应用程序是否已关闭?如果一个winform关闭了怎么办?boolisRunning=false;foreach(ProcessclsProcessinProcess.GetProcesses()){if(clsProcess.ProcessName.Contains("Notepad")){isRunning=true;休息;上面的代码总是检查进程是否存在,但是代码对于我想要它做的事情来说很慢。那么有没有一种方法可以检查记事本进程是否确实已关闭,而不是总是循环查看它是否存在?您可以使用Win32_ProcessStopTrace来指示进程已终止。ManagementEventWatcher观察者;protectedoverridevoidOnLoad(EventArgse){base.OnLoad(e);watcher=newManagementEventWatcher("选择*来自Win32_ProcessStopTrace");watcher.EventArrived+=newEventArrivedEventHandler(watcher_Event;errived.})voidwatcher_EventArrived(对象发送者,EventArrivedEventArgse){if((string)e.NewEvent["ProcessName"]=="notepad.exe")MessageBox.Show("记事本关闭");}protectedoverridevoidOnFormClosed(FormClosedEventArgse){watcher.Stop();观察者.Dispose();base.OnFormClosed(e);不要忘记添加对System.Management和usingSystem.Management的引用;添加使用System.Management;请注意,这应该可以解决问题。当进程终止时,它将为您创建一个事件。无需走完所有流程。公共静态事件EventHandlerProcessDied;publicvoidCheckForProcess(){InitializeComponent();ProcessDied+=newEventHandler(Process_Died);AttachProcessDiedEvent("记事本",ProcessDied);}privatevoidAttachProcessDiedEvent(stringprocessName,EventHandlere){ProcessisSelectedProcess=null;foreach(ProcessclsProcessinProcess.GetProcesses()){if(clsProcess.ProcessName.Contains(processName)){isSelectedProcess=clsProcess;休息;}}if(isSelectedProcess!=null){isSelectedProcess.WaitForExit();}if(e!=null){e.Invoke(processName,newEventArgs());}}privatevoidProcess_Died(objectsender,EventArgse){//DoYourwork}如果有任何问题,请告诉我。您可以不使用循环但不知道它是否更快:boolisRunning=Process.GetProcessesByName("NotePad").FirstOrDefault()!=null;或boolisRunning=Process.GetProcessesByName("notepad").Any();获取这里检查特定的exe文件是否正在运行以上是C#学习教程:如何知道外部应用程序是否关闭?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
