【发布时间】:2012-09-09 14:44:04
【问题描述】:
我有一个 C# 应用程序,它在启动时显示登录表单,并在用户通过身份验证后显示主表单。我使用 Mutex 来限制我的应用程序只能运行一个实例。而且,这仅适用于登录表单。显示主表单后,它不会限制用户重新打开登录表单。我正在寻找一种解决方案,一旦主窗体已经打开,登录屏幕就无法显示。
这是我的 Program.cs
[STAThread]
static void Main()
{
bool mutexCreated=true;
using (Mutex mutex = new Mutex(true, "eCS", out mutexCreated))
{
if (mutexCreated)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
else
{
Process current = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(current.ProcessName))
{
if (process.Id != current.Id)
{
XtraMessageBox.Show("Another instance of eCS is already running.", "eCS already running", MessageBoxButtons.OK, MessageBoxIcon.Information);
SetForegroundWindow(process.MainWindowHandle);
break;
}
}
}
}
}
【问题讨论】:
-
所以您无法控制您可以允许用户做什么和不可以做什么?我认为必须有一些按钮或其他方式让用户可以重新打开登录屏幕。你为什么不直接删除那些?
-
将您的代码从登录表单移动到 Program.cs 中的 Main() 方法
-
Hans Passant,我的 Program.cs 应该会启动登录窗口。而且我的代码已经在 Program.cs 中但无法正常工作。代码如下:
标签: c# mutex single-instance