C#winform 有关判断进程的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform 有关判断进程的问题相关的知识,希望对你有一定的参考价值。
我有个等待窗口,需要通过判断某个进程是否启动,当该进程启动时就弹出该等待窗口,当该进程自动关闭后就关掉该等待窗口。我的问题是:判断该进程是否启动可以用 Process[] ps = Process.GetProcesses();
foreach (Process p in ps)
if (p.ProcessName == "OCR")//判断进程名称
OcrWaitForm.ShowDialog();
但是在OcrWaitForm窗体中如何去判断该进程时候关闭呢?比较绕,不知道各位道友可否有方法解决?在此谢过了!
OcrWaitForm.ShowDialog();
break;
这部分由于是用showDialog();模式对话框,程序运行到此处如果当前对话框没有关闭,程序会停在这里不会向下运行
造成下面这个地方得不到执行:
if(isclose == false && isopen == true)
//处理事件
这样也就无法实现你要的功能。
我说下我的思路,希望能帮到你
引入名称空间:using System.Diagnostics;
foreach (Process p in ps)
if (p.ProcessName == "OCR")//判断进程名称
OcrWaitForm.Show();
while(!p.HasExited)//等待OCR进程退出
Thread.Sleep(500);
OcrWaitForm.Close();
break;
追问
很感谢你的回答,我在调试的过程中使用这句代码while(!p.HasExited)发现无法达到我所要监控OCR的目的,反而成了监视OcrWaitForm。
当我在任务管理器关闭OCR的时候,原程序无反应,但当我关闭这个等待窗口的时候它才弹出OK。所以我才觉得这句代码while(!p.HasExited)发现无法达到我所需要的,不知道我的代码中有什么纰漏么,有空能否回下,非常感谢!
上面代码是按思路写的,只是提供思路,没有经过我的测试。你说的部分情况是对的。过会我整理代码,测试过后给你贴代码
我看了你把我的代码引用了,但有个地方修改了 Thread.Sleep(500);
以下是我测试过的代码,用记事本进程做实验,通过测试。
测试以下代码时,请先打开一个记事本程序,另请确认你电脑上的记事本程序 进程名为“notepad”,否则请自行修改本名称。
private void button1_Click(object sender, EventArgs e)
Process[] ps=Process.GetProcesses();
if (ps.Length > 0 )
foreach (Process p in ps)
if (p.ProcessName=="notepad")
while (!p.HasExited)
System.Threading.Thread.Sleep(500);
MessageBox.Show("Notepad has Exited");
本代码 只为测试,提供思路。不代表可以直接使用,其它进程占用,界面失去响应等问题,请自行解决。
bool isclose = false;//用来判断是否已经关闭
bool isopen = false; //用来判断是否曾经打开过,如果曾经打开过该变量就应该为true
foreach (Process p in ps)
if (p.ProcessName == "OCR")//判断进程名称
isclose = true;
isopen = true;
OcrWaitForm.ShowDialog();
break;
isclose = false;
if(isclose == false && isopen == true)
//处理事件
以上是关于C#winform 有关判断进程的问题的主要内容,如果未能解决你的问题,请参考以下文章