У меня есть поток, который работает постоянно:
private void DoSomeStuffThread() {
Semaphore sem = new Semaphore(0, 3, "sem_DoStuff");
sem.WaitOne();
do {
//do some stuff
} while (sem.WaitOne());
}
Я хочу иметь возможность выполнять данные в блоке do только тогда, когда об этом говорит что-то из другого процесса. Я пытаюсь использовать системный семафор sem_DoStuff, чтобы это произошло.
Код, который выполняется в другом моем процессе:
public string DoStuff() {
try {
Semaphore sem = Semaphore.OpenExisting("sem_DoStuff");
sem.Release();
} catch (Exception e) {
return e.Message;
}
}
Итак, идея состоит в том, что когда вызывается DoStuff, семафор освобождается, и DoSomeStuffThread прекращает ожидание, выполняет то, что находится в блоке do, а затем снова ждет DoStuff, прежде чем он будет вызван. Но когда вызывается DoStuff, я получаю исключение «Никакой дескриптор данного имени не существует». Что я делаю неправильно?
Спасибо.