[英]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.