blu*_*blu 5 c# com wcf winapi winforms
我们在C#3.5(SP 1)中有一个WinForms应用程序.我们希望将应用程序限制在具有多个窗口实例的内存中的一个进程.我们不是在寻找MDI方法,而是在不启动多个应用程序进程的情况下拥有单独的主表单实例.
我们正在评估三种方法:
我们有前两个(PInvoke with Windows Messages and overrr WinProc,COM Registry等)的粗略细节,他们使用的是旧技术.
我们讨论了将WCF与命名管道一起使用的想法,并认为这可能是完成手头任务的最简洁和最简单的方法.
将应用程序限制为具有多个主要表单实例的一个进程的最简洁,最现代的方法是什么?
我过去采用的方法之一是使用系统互斥对象。其背后的理论是,应用程序的第一个实例将生成互斥对象,应用程序的后续实例然后尝试打开预定义互斥对象的句柄,如果存在,则 bamo!退出第二个、第三个和第四个....实例。
public static void CheckSingleInstance()
{
bool created = false;
_singleInstance = new Mutex(true, "PredefinedMutexName##1", out created);
if (!created)
{
MessageBox.Show("Another instance of this application is already running. Click OK to switch to that instance.", "Application running", MessageBoxButtons.OK, MessageBoxIcon.Information);
Process proc = Process.GetCurrentProcess();
Process[] procs = Process.GetProcessesByName(proc.ProcessName);
bool exit = false;
Process process = null;
foreach (Process p in procs)
{
if (p.Id != proc.Id && p.MainModule.FileName == proc.MainModule.FileName)
{
// ShowWindow(p.MainWindowHandle, 1/*SW_SHOWNORMAL*/);
process = p;
exit = true;
}
}
if (exit)
{
Application.Exit();
if (process != null)
NativeMethods.SetForegroundWindow(process.MainWindowHandle);
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1524 次 |
| 最近记录: |