У меня есть поток, который работает все время:
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, я получаю исключение «Дескриптор с данным именем не существует».Что я делаю не так?
Спасибо.