У меня есть следующий код внутри созданного файла FileSystemWatcher. Таким образом, всякий раз, когда создается файл, он будет работать код ниже:XmlReader.Create получить «процесс не может получить доступ к файлу, потому что он используется другим процессом» ошибка
private static void FileWatch_RequestAdded(object sender, FileSystemEventArgs e)
{
try
{
RequestFile request = GetRequest(e.FullPath);
EventHandler<MESRequestEventArgs> requestReceived = Instance.RequestReceived;
if (requestReceived != null)
requestReceived(Instance, new MESRequestEventArgs(e.Name, request));
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
}
}
private static object locker = new object();
public static RequestFile GetRequest(string filepath)
{
string filename = Path.GetFileName(filepath);
RequestFile file = new RequestFile(filename);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.None;
lock (locker)
{
using (XmlReader reader = XmlReader.Create(filepath, settings))
{
XmlSerializer serializer = new XmlSerializer(typeof(RequestFile));
file = serializer.Deserialize(reader) as RequestFile;
}
}
file.Name = filename;
return file;
}
Проблема заключается в том, когда несколько файлов, созданных в то же время, иногда он бросил исключение: System.IO.IOException: Процесс не может получить доступ к файл, потому что он используется другой ошибкой процесса.
Любые решения?
показать, как/где вы создаете экземпляр «шкафчика» – loopedcode
Почему бы вам не проверить, если файл находится в использовании, прежде чем вы попытаетесь прочитать его –
, если это так, я думаю, что он должен делать с тем, когда и как вы называете этот метод, а не самим методом. Это звучит многопоточно. – DidIReallyWriteThat