Nico.E
Nico.E

Reputation: 82

Start the same program many times but only one should work

Is it somehow possible that if I start my program like 10 times fast in a row, but only one at a time should do something. The other keep waiting that the working program is finished or stopped.

So in the end, if I open my program 10 times, all 10 programs should be working in a row, not simultaneously.

Is this possible in c#?

Upvotes: 0

Views: 64

Answers (2)

Matthew Watson
Matthew Watson

Reputation: 109567

You can use a named EventWaitHandle to do this, for example:

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");
            }
        }
    }
}

Try running a few instances of this console app and watch the output.

Upvotes: 1

Zbych R
Zbych R

Reputation: 1

You can use system wide Mutex or system wide Semaphore. If you create Mutex or Semaphore with name it become visible for whole system - in other words it can be visible from other processes.

 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();
        }

Upvotes: 0

Related Questions