将IsProcessOpen实现到应用程序中

时间:2014-07-02 11:51:29

标签: c# if-statement methods boolean

我找到了检查我的程序是否正在运行的解决方案,这要归功于另一个线程中的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'因为它是一个'方法组'

我很抱歉,如果这是一个愚蠢的问题,但我试图用Google搜索答案,但找不到它..

编辑:代码的其余部分:

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);
        }
    }

1 个答案:

答案 0 :(得分:0)

所以我想出了如何使用互斥锁。我发布这封信不是为了让线程保持畅通。

我没有在主菜单的代码中使用互斥锁,因为我认为必须这样做。 Insted我在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());
        }
    }
}