计数没有的信号量实现.当前正在运行的实例

USE*_*AME 5 c# semaphore

我正在研究多实例应用程序.在c#中是否有任何方法可以知道当前正在运行多少个实例.
我使用了一段代码来计算我的应用程序名称的窗口进程,但这不是一个好方法.

string fileName = Process.GetCurrentProcess().MainModule.FileName;
int count = 0;
foreach (Process p in Process.GetProcesses())
{
    try
     {
        if (p.MainModule.FileName == fileName)
        {
            count++;
        }
    }
    catch { }
}

MessageBox.Show("Total Instances Running are " + count);
Run Code Online (Sandbox Code Playgroud)


可以通过使用信号量或一些递增和递减计数器来完成,该计数器在创建新实例时递增1并在实例关闭时递减1.

zmb*_*mbq 1

ASemaphore帮助您倒计时,当您达到 0 时会阻止您。您可以使用全局信号量,但您必须将其初始化为足够高的值并开始倒计时。

我认为总而言之,您自己的解决方案可能是最干净的。