Трудно сказать, что именно происходит, поскольку вы не предоставили информацию о количестве элементов в словаре и т. Д., Но, похоже, вы столкнулись с какой-то проблемой доступа к файлу при доступе к тому же файлу из нескольких процессов.
Вы можете использовать именованный Mutex в качестве объекта межпроцессной синхронизации, поэтому перед доступом к файлу необходимо убедиться, что дескриптор Mutex освобожден, чтобы вы могли получить право собственности, а другой процесс мог ждать до того, как доступ к файлу.
// Create a mutex
Mutex mutex = new Mutex(false, "DictionaryAccessMutex");
// Acquire an ownership
mutex.WaitOne();
// Release
mutex.ReleaseMutex();
РЕДАКТИРОВАТЬ: Новая находка
Также вы пытаетесь писать сразу после чтения, поэтому, возможно, операция FileSystem еще не завершена, поэтому запись не удалась, я не уверен, что 100% в этом, возможно, .NET-управляемых классах, таких как File / StreamReader / etc, уже обрабатывали такие случаи, но Я считаю, что в вашем случае стоит перепроверить, так как не ясно на 100%, что произошло. Поэтому попробуйте добавить некоторое время ожидания, например Thread.Sleep(500)
, между операциями чтения и записи.
РЕДАКТИРОВАТЬ: Еще одна вещь, которую вы можете сделать, это загрузить Утилита Process Monitor SysInternals и посмотреть, какие операции не были выполнены при доступе к данному файлу. Так что просто добавьте новый фильтр Path=file name
, и вы сможете увидеть, что происходит на низком уровне.