多次启动相同的程序,但只有一个应该工作

时间:2018-05-28 10:06:55

标签: c#

在某种程度上,如果我连续快速启动我的程序10次,但是一次只能执行一次,那么它是否可能。另一个继续等待工作程序完成或停止。

所以最后,如果我打开我的程序10次,所有10个程序应该连续工作,而不是同时工作。

这可能在c#中吗?

2 个答案:

答案 0 :(得分:1)

您可以使用命名EventWaitHandle来执行此操作,例如:

using System;
using System.Threading;

namespace Demo
{
    static class Program
    {
        static void Main()
        {
            using (var waitHandle = new EventWaitHandle(true, EventResetMode.AutoReset, "MyHandleName"))
            {
                Console.WriteLine("Waiting for handle");
                waitHandle.WaitOne();

                try
                {
                    // Body of program goes here.
                    Console.WriteLine("Waited for handle; press RETURN to exit program.");
                    Console.ReadLine();
                }

                finally
                {
                    waitHandle.Set();
                }

                Console.WriteLine("Exiting program");
            }
        }
    }
}

尝试运行此控制台应用的几个实例并观看输出。

答案 1 :(得分:0)

您可以使用系统范围的互斥锁或系统范围的信号量。如果您使用名称创建Mutex或Semaphore,它将对整个系统可见 - 换句话说,它可以从其他进程中看到。

 Mutex syncMutex = new Mutex(false, "NAME OF MUTEX");
        try
        {
            if(!syncMutex.WaitOne(MUTEX_TIMEOUT))
            {
                //fail to get mutex
                return;
            }
            //mutex obtained do something....
        }
        catch(Exception ex)
        {
            //handle error
        }
        finally
        {                
             //release mutex
            syncMutex.ReleaseMutex();
        }