[英]Constantly check if a process is open
我想不断检查后台进程是否正在运行,我只有一个标签(用于显示结果)显示它是否正在运行的代码是:
Process[] plist = Process.GetProcessesByName("chrome");
if (plist.Length > 0)
{
label1.ForeColor = Color.Green;
label1.Text = "FOUND";
}
else
{
label1.ForeColor = Color.Red;
label1.Text = "NOT FOUND";
}
当运行它时,它可以工作,但是当我关闭进程时它仍然显示“找到”,我怎样才能让它始终检查 plist.Lenght 是 0 还是 >0? ps:我尝试了一些重复的问题等,但没有成功。
using System;
using System.Diagnostics;
namespace Program
{
class Program
{
static void Main(string[] args)
{
Process[] plist = Process.GetProcessesByName("msedge");
if (plist.Length > 0)
{
Console.WriteLine(plist[0].ProcessName);
}
else
{
Console.WriteLine("NotFound");
}
}
}
}
上面的代码似乎工作得很好。 我要检查的两件事是:
打开任务管理器 确保所有 chrome 进程都关闭,即使您的 chrome 网络浏览器关闭,这里也可能有一些打开。 我使用了 msedge,它似乎工作得很好。
您可能已经硬循环了您的 UI 线程。 这意味着它非常忙于检查流程,以至于没有时间更新您的标签。 通常你不会在 UI 线程上执行这样的任务,而是在侧线程上中断它们。 或者,您可以在主线程上使用计时器,每隔几毫秒检查一次。 最后但不好的方法是调用:
label1.Invalidate();
Application.DoEvents();
这些行将强制 UI 更新和暂停您的流程检查,但实际上仅适用于测试/开发。 因为这会导致您的所有流程滞后,这对生产环境来说不是一件好事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.