簡體   English   中英

C# 檢測關閉應用程序

[英]C# Detect Closing Application

我正在嘗試創建任務欄替換,並且我想要每個正在運行的應用程序的按鈕。

public void AddBtn(string name) {
        Button newButton = new Button();
        this.Controls.Add(newButton);
        newButton.Location = new Point(count * 75, Screen.PrimaryScreen.Bounds.Height - 25);
        newButton.Text = name;
        newButton.Name = count.ToString();
        newButton.BringToFront();
        count++;
    }

    private void GetRunning()
    {
        Process[] processes = Process.GetProcesses();
        foreach (Process process in Process.GetProcesses().Where(p => !string.IsNullOrEmpty(p.MainWindowTitle)).ToList())
            AddBtn(process.ProcessName);
    }

這就是我到目前為止所擁有的,它為每個正在運行的應用程序創建一個按鈕。 我需要檢測其中一個應用程序是否關閉,以便我可以刪除與其對應的按鈕。 如果您認為有更好的方法可以做到這一點,請告訴我。

首先,最好將用於添加按鈕的代碼移到別處,並且只使用GetRunning來獲取當前正在運行的進程。 像這樣修改它:

private List<Process> GetRunning()
{
    return Process.GetProcesses().Where(p => !string.IsNullOrEmpty(p.MainWindowTitle)).ToList();
}

private void AddButtons()
{
    for (var process in this.GetRunning())
    {
        AddBtn(process.ProcessName);
    }
}

現在,關於您的問題,有兩種解決方案:

解決方案 1:使用事件

創建一個方法HandleClosed ,它處理進程退出時需要完成的所有操作:

private void HandleClosed(Process sender, EventArgs e)
{
    // Stuff
}

然后,您可以將其綁定到進程的Exited事件,如下所示:

private void BindProcesses()
{
    foreach (var process in this.GetRunning())
    {
        process.EnableRaisingEvents = true;
        process.Exited += this.HandleClosed;
    }
}

現在,每當其中一個進程退出時, HandleClosed將被調用,關閉的進程將通過sender傳遞給它。

解決方案 2:自己管理

將私有字段添加到您的類中, private List<Process> prevProcesses; .

然后創建一個新方法GetClosed

private List<Process> GetClosed()
{
    var current = GetRunning();
    var result = this.prevProcesses.Except(current);
    this.prevProcesses = current;
    return result.ToList();
}

此方法的作用是獲取當前正在運行的進程,然后將該枚舉與prevProcesses進行比較。 prevProcesses但不在current中的進程是已經關閉的進程。 然后,它使用當前枚舉更新prevProcesses

最后,在您的構造函數或您用於初始化的任何其他方法中獲取prevProcesses的初始值:

this.prevProcesses = this.GetRunning();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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