簡體   English   中英

不斷檢查進程是否打開

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM