方法一:只禁止多个进程运行
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
[stathread]
public static void main()
{
bool ret;
system.threading.mutex mutex = new system.threading.mutex(true, application.productname, out ret);
if (ret)
{
system.windows.forms.application.enablevisualstyles(); //这两行实现 xp 可视风格
system.windows.forms.application.doevents();
system.windows.forms.application.run(new main());
// main 为你程序的主窗体,如果是控制台程序不用这句
mutex.releasemutex();
}
else
{
messagebox.show(null, “有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。这个程序即将退出。”, application.productname, messageboxbuttons.ok, messageboxicon.warning);
// 提示信息,可以删除。
application.exit();//退出程序
}
}
[stathread]
public static void main()
{
bool ret;
system.threading.mutex mutex = new system.threading.mutex(true, application.productname, out ret);
if (ret)
{
system.windows.forms.application.enablevisualstyles(); //这两行实现 xp 可视风格
system.windows.forms.application.doevents();
system.windows.forms.application.run(new main());
// main 为你程序的主窗体,如果是控制台程序不用这句
mutex.releasemutex();
}
else
{
messagebox.show(null, “有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。这个程序即将退出。”, application.productname, messageboxbuttons.ok, messageboxicon.warning);
// 提示信息,可以删除。
application.exit();//退出程序
}
}
方法二:禁止多个进程运行,并当重复运行时激活以前的进程
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
[stathread]
public static void main()
{
//get the running instance.
process instance = runninginstance();
if (instance == null)
{
system.windows.forms.application.enablevisualstyles(); //这两行实现 xp 可视风格
system.windows.forms.application.doevents();
//there isn’t another instance, show our form.
application.run(new main());
}
else
{
//there is another instance of this process.
handlerunninginstance(instance);
}
}
public static process runninginstance()
{
process current = process.getcurrentprocess();
process[] processes = process.getprocessesbyname(current.processname);
//loop through the running processes in with the same name
foreach (process process in processes)
{
//ignore the current process
if (process.id != current.id)
{
//make sure that the process is running from the exe file.
if (assembly.getexecutingassembly().location.replace(“/”, “\”) == current.mainmodule.filename)
{
//return the other process instance.
return process;
}
}
}
//no other instance was found, return null.
return null;
}
public static void handlerunninginstance(process instance)
{
//make sure the window is not minimized or maximized
showwindowasync(instance.mainwindowhandle, ws_shownormal);
//set the real intance to foreground window
setforegroundwindow(instance.mainwindowhandle);
}
[dllimport(“user32.dll”)]
private static extern bool showwindowasync(intptr hwnd, int cmdshow);
[dllimport(“user32.dll”)]
private static extern bool setforegroundwindow(intptr hwnd);
private const int ws_shownormal = 1;
[stathread]
public static void main()
{
//get the running instance.
process instance = runninginstance();
if (instance == null)
{
system.windows.forms.application.enablevisualstyles(); //这两行实现 xp 可视风格
system.windows.forms.application.doevents();
//there isn’t another instance, show our form.
application.run(new main());
}
else
{
//there is another instance of this process.
handlerunninginstance(instance);
}
}
public static process runninginstance()
{
process current = process.getcurrentprocess();
process[] processes = process.getprocessesbyname(current.processname);
//loop through the running processes in with the same name
foreach (process process in processes)
{
//ignore the current process
if (process.id != current.id)
{
//make sure that the process is running from the exe file.
if (assembly.getexecutingassembly().location.replace(“/”, “\”) == current.mainmodule.filename)
{
//return the other process instance.
return process;
}
}
}
//no other instance was found, return null.
return null;
}
public static void handlerunninginstance(process instance)
{
//make sure the window is not minimized or maximized
showwindowasync(instance.mainwindowhandle, ws_shownormal);
//set the real intance to foreground window
setforegroundwindow(instance.mainwindowhandle);
}
[dllimport(“user32.dll”)]
private static extern bool showwindowasync(intptr hwnd, int cmdshow);
[dllimport(“user32.dll”)]
private static extern bool setforegroundwindow(intptr hwnd);
private const int ws_shownormal = 1;
以上就是C#只允许启动一个WinFrom进程的两种方法的内容,更多相关内容请关注PHP中文网(www.php.cn)!