【问题标题】:Implement a IsProcessOpen into an application将 IsProcessOpen 实现到应用程序中
【发布时间】:2014-08-23 04:52:04
【问题描述】:

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

【问题讨论】:

  • 请向我们提供您遇到问题的代码。我们需要查看您的代码。错误不在方法中,而是在您调用此方法的位置。
  • 如果您正在使用if(IsProcessOpen),则需要将其更改为if(IsProcessOpen())if(IsProcessOpen("someprocessname"))
  • 不要谷歌,阅读错误信息。它告诉您错误的原因/性质(这就是为什么它被称为“错误消息”而不是,例如,“贺卡”)。该消息告诉您“...因为它是一个方法组”。所以你正在处理一个方法IsProcessOpen(...)。然后它还告诉您您尝试为 IsProcessOpen(...) = somevalue; 之类的方法分配一个值,这当然是不可能的 - 您只能为变量/字段/属性分配值,但不能为方法分配值......很可能,您不小心使用了 @在某些 if 语句中使用 987654330@ 而不是 ==...
  • 这 4 个赞让我吃惊...
  • 对不起,没有侮辱任何人的意思。正如我所说,我刚开始编程,所以我知道的很少。我已经用其余的代码更新了我的第一篇文章。

标签: c# if-statement methods boolean


【解决方案1】:

所以我想出了如何使用互斥锁。我只是为了不让线程保持打开状态而发布此内容。

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

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2020-10-11
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多