Код: Выделить всё
static Mutex mutex = new Mutex (false, "oreilly.com OneAtATimeDemo");
static void Main()
{
// Wait a few seconds if contended, in case another instance
// of the program is still in the process of shutting down.
if (!mutex.WaitOne (TimeSpan.FromSeconds (3), false))
{
Console.WriteLine ("Another instance of the app is running. Bye!");
return;
}
try
{
Console.WriteLine ("Running. Press Enter to exit");
Console.ReadLine();
}
finally { mutex.ReleaseMutex(); }
}
В этом коде:
Код: Выделить всё
if(mutex.WaitOne(TimeSpan.Zero, true))
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
mutex.ReleaseMutex();
}
else
{
MessageBox.Show("only one instance at a time");
}
нет инверсии if/bool. Если True будет возвращен, текущий поток будет заблокирован, что будет означать, что два процесса, вызывающие одно и то же приложение, оба остановится?// Don't block the thread while executing code.
//Let the code finish and then signal for another process to enter
< /code>
Каково значение нет! (возвращение правды) и наоборот. Или, другими словами, что происходит в любом случае? Джон Скит показал хороший пример этого на своем сайте, который застрял в моей голове (кредит его объяснениям). Так что, очевидно, Уэйтон ждет, пока одна нить закончит. Возвращаемое значение - это то, что меня смущает.
Подробнее здесь: https://stackoverflow.com/questions/815 ... one-method
Мобильная версия