我找到了检查我的程序是否正在运行的解决方案,这要归功于另一个线程中的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);
}
}
答案 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());
}
}
}