C#只允许运行一个实例

var preInstance = Process.GetProcesses().FirstOrDefault(p =>
            {
                try
                {
                    if (p.Id != Process.GetCurrentProcess().Id
                        && p.MainModule != null
                        && p.MainModule.FileName.ToLower() == Assembly.GetExecutingAssembly().Location.ToLower())
                        return true;

                    return false;
                }
                catch
                {
                    return false;
                }
            });

            if (preInstance != null)
            {
                MessageBox.Show("程序已在运行!");
                return;
            }

 以上代码有性能问题,使用以下代码:

using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        bool createdNew;
        Mutex mutex = new Mutex(true, "MyMutex", out createdNew);

        if (!createdNew)
        {
            // 如果不是第一个实例,则已经有实例在运行
            Console.WriteLine("Another instance is already running.");
            return;
        }

        // 在这里写你的应用程序代码

        // 释放互斥体
        mutex.ReleaseMutex();
    }
}

 

posted on 2020-11-20 09:38  空明流光  阅读(230)  评论(0编辑  收藏  举报

导航