aby*_*aby 4 c# mutex single-instance
我有一个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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做了一些小改动:
namespace CSMutex
{
static class Program
{
[STAThread]
static void Main()
{
bool mutexCreated=true;
using(Mutex mutex = new Mutex(true, "eCS", out mutexCreated))
{
if (mutexCreated)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Login loging = new Login();
Application.Run(loging);
Application.Run(new Main() { UserName = loging.UserName });
}
else
{
Process current = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(current.ProcessName))
{
if (process.Id != current.Id)
{
MessageBox.Show("Another instance of eCS is already running.", "eCS already running", MessageBoxButtons.OK, MessageBoxIcon.Information);
//SetForegroundWindow(process.MainWindowHandle);
break;
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作 - 即使Login表单关闭(并且主应用程序表单已启动),它也不允许用户再次运行应用程序.我决定不Main从内部创建Login(这是我相信你的应用程序如何工作)而是我传递参数Main.我也做了一些小改动,Login所以它有UserName属性(相同Main).
| 归档时间: |
|
| 查看次数: |
5886 次 |
| 最近记录: |