在应用程序中实现一个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);
}
}
所以我想出了如何使用互斥。我只是把这个贴出来,不让这个话题开着。
我没有在主菜单的代码中使用互斥锁,因为我认为我必须这样做。相反,我把它添加到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());
}
}
}