Я написал приложение службы Windows на C #, которое читает файл через делегат таймера каждые 20 минут или около того, десериализует содержимое, а затем очищает файл.Файл записывается одним или несколькими клиентскими приложениями, работающими на той же машине, и я решил использовать Mutex для более или менее «блокировки» файла во время его десериализации и записи службой.
Я делаю это, чтобы избежать исключений в редких случаях, когда клиентское приложение и служба пытаются одновременно записывать в файл.
Я создаю Mutex внутри службы Windowsс помощью следующего кода C # (он запускается каждые 20 минут):
public void MyServiceFunction() {
Mutex sessMutex = new Mutex(false, "sessMutex");
sessMutex.WaitOne();
// Write to the file ......
sessMutex.ReleaseMutex();
}
В клиентском приложении я запускаю следующее:
public void MyClientFunction() {
Mutex mutex = Mutex.OpenExisting("sessMutex");
mutex.WaitOne();
// Write to the file ......
mutex.ReleaseMutex();
}
Теперь, если я запускаю службу Windows изапустите клиентское приложение в течение нескольких минут, все работает нормально.Однако через несколько часов при попытке запустить клиентское приложение я получаю следующую ошибку:
No handle of the given name exists.
У меня вопрос, как предотвратить возникновение этой ошибки и "сохранение" Mutex.
Будет ли работать Mutex как свойство класса обслуживания Windows?Является ли использование Mutex правильным способом для достижения нужной мне функциональности?
Заранее благодарен за помощь!