1.背景
在工作过程中遇到多次点击winform或wpf程序启动时,程序会启动多个实例。经过测试对比后,采用了文件锁来保证同一个窗体程序多次点击启动,只启动一个实例。
2.步骤
文件锁的程序:
/// <summary>
/// 文件锁
/// </summary>
public class FileLocks
{
static FileStream _lockFile;
/// <summary>
/// 检测实例唯一
/// </summary>
/// <returns></returns>
public bool CheckSingleInstance()
{
//判断 MacOS系统自带实例检测, 只考虑 Windows和linux下的实例唯一 检测
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
return true;
}
var dir = AppDomain.CurrentDomain.BaseDirectory;
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
try
{
//Console.WriteLine("Check File Lock");
_lockFile = File.Open(Path.Combine(dir, ".lock"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
_lockFile.Lock(0, 0);
return true;
}
catch (Exception ex)
{
//Console.WriteLine("error:" + ex.Message);
return false;
}
}
}
internal class Program
{
static void Main(string[] args)
{
FileLocks fileLocks = new FileLocks();
bool isSinge = fileLocks.CheckSingleInstance();
Console.WriteLine($"是否第一次启动:{isSinge}");
if (isSinge)
{
Console.ReadKey();
}
else
{
Console.WriteLine("之前已经启动过程序,即将关闭");
}
}
}
3.结论
至此,结束。