在应用程序中实现一个IsProcessOpen

本文关键字:一个 IsProcessOpen 应用程序 实现 | 更新日期: 2023-09-27 18:11:18

我已经找到了检查我的程序是否正在运行的解决方案,感谢DaveK在另一个线程中。但我没有评论的声誉,也没有找到给他留言的方法,所以我创建了这个新问题。

我是一个编程新手,刚刚开始创建一个简单的程序。我想阻止程序运行多个实例。由于我不理解互斥锁,我想使用DaveK的解决方案。

public bool IsProcessOpen(string name = "Opentxtfile")
{
        foreach (Process clsProcess in Process.GetProcesses())
        {
            if (clsProcess.ProcessName.Contains(name))
            {
                return true;
            }
        }
        return false;
}

在此之后,我想使用true或false来退出程序或继续运行,但是我无法使此工作。当我尝试在if语句中使用IsProcessOpen时,我得到错误:

不能赋值给'IsProcessOpen',因为它是一个'方法组'

我很抱歉,如果这是一个愚蠢的问题,但我已经试图谷歌我的方式的答案,但无法找到它…

编辑:剩余代码:

public Main()
    {
        InitializeComponent();
    }
    private void S_Click(object sender, EventArgs e)
    {
        S O = new S();
        O.ShowDialog();
        this.Hide();
    }
    private void Ro_Click(object sender, EventArgs e)
    {
        Ro R = new Ro();
        R.ShowDialog();
        this.Hide();
    }
    private void Quit_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }
}

所以在另一个论坛的帮助下,我似乎遗漏了一些括号。但是现在,当我添加这个时,什么也没有发生:

        public void errormessage()
    {
        if (IsProcessOpen())
        {
             MessageBox.Show("Program is already running!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

在应用程序中实现一个IsProcessOpen

所以我想出了如何使用互斥。我只是把这个贴出来,不让这个话题开着。

我没有在主菜单的代码中使用互斥锁,因为我认为我必须这样做。相反,我把它添加到Program.cs中。下面是代码:

namespace My_Program
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static Mutex mx;
        const string singleInstance = @"MU.Mutex";
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                System.Threading.Mutex.OpenExisting(singleInstance);
                MessageBox.Show("The program is already running!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            catch (Exception e)
            {
                mx = new System.Threading.Mutex(true, singleInstance);
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Main());
        }
    }
}