FileSystemWatcher 파일 생성 이벤트 내에 다음 코드가 있습니다. 파일이 만들어 질 때마다 그래서, 아래의 코드를 실행합니다 :XmlReader.Create get "프로세스가 다른 프로세스에서 사용 중이므로 파일에 액세스 할 수 없습니다."오류
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