程序启动检查引申
方案一:启动时,检查设备中是否有残留进程。
/// <summary>
/// 获取当前是否具有相同进程。
/// </summary>
/// <returns></returns>
public static Process GetRunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//遍历正在有相同名字运行的例程
foreach (Process process in processes)
{
if (process.Id != current.Id)
if (System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
return process;
}
return null;
}
有进程的时候又要思考,是使用之前的进程,还是启用新开的程序?
当然是根据需要了
方法一:激活原有的进程
/// 激活原有的进程。
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWMaximized);
SetForegroundWindow(instance.MainWindowHandle);
}
private const int WS_SHOWNORMAL = 1;
private const int WS_SHOWMinimized = 2;
private const int WS_SHOWMaximized = 3;
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd)
方法二:
干掉老皇帝,重新树立新皇:
curPro.Kill();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
但是吧,有时候我们是想退出程序,但是没有退干净造成的残留,这就尴尬了
C# 在关闭窗体时 关闭窗体的所有线程,使程序退出。
this.close();
只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;
Application.Exit();
强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;
Application.ExitThread();
强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;
System.Environment.Exit(0);
这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
当然也有在退出的时候把所有的线程,页面挨个梳理一遍并关闭的,只要页面不多,线程管理适当,其实也行哈
主要是给自己做个笔记。