Замок принципиально отличается от WaitHandle
.С блокировкой вы пишете, например:
lock (SomeResource)
{
// do stuff here
}
Первая строка говорит: «Я хочу эксклюзивный доступ к этому ресурсу» и будет ждать, пока этот ресурс не станет доступным (т. Е. Никто другой не имеет блокировки на нем).Затем код запускается, и в конце блокировка снимается, чтобы другие могли ее использовать.
WaitHandle
используется для ожидания какого-либо события.Когда вы пишете:
MyWaitHandle.WaitOne();
Ваш код ожидает, пока какой-то другой поток (возможно, в другом процессе) сообщит, что WaitHandle
.То, что он сигнализирует, может быть чем угодно.Возможно, вы ожидаете, пока другой поток завершит свою работу и скажет: «Я закончил», прежде чем ваш код сможет продолжить работу.
Итак, чтобы ответить на ваш вопрос, вы должны использовать блокировку, когда захотитеполучить эксклюзивный доступ к ресурсу.Вы должны использовать WaitHandle
, если хотите получать уведомления о каком-либо событии.