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");



本代码 只为测试,提供思路。不代表可以直接使用,其它进程占用,界面失去响应等问题,请自行解决。

参考技术A 你用一个变量布尔值变量isclose。
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 有关判断进程的问题的主要内容,如果未能解决你的问题,请参考以下文章

C#winform判断子窗口是不是已关闭或在关闭的时候触发事件

有关C#winform的调用外部程序的问题

C# winform 跨线程操作winform程序窗体

c#winform如何判断按钮的text属性是不是为数字

C#Winform判断文件和路径是否存在

c# winform checkbox判断