2012-03-22 213 views
0

我正在使用XML文件来存储值。这个XML文件可以通过多种方法访问。读取/写入文件时发生IO异常

Private object lockObject = new object() 

Method1 
{ 
    Lock(this.lockObject) 
    { 
    MyCommonMethod() 
    } 
} 

Timer.ElapseEvent 
{ 
    Lock(this.lockObject) 
    { 
    MyCommonMethod() 
    } 
} 

MyCommonMethod() 
{ 
    // Read/Write to XML file. 
    var element = XElement.Load(path); 
    // some operations 

    element.save(path) 
} 

此类用于许多其它类和有时候它会抛出异常System.IO,该文件已经被其他的过程,虽然我已经使用了lock语句

请指导。

+0

是否有使用该文件的其他进程? – 2012-03-22 02:51:46

+1

这将防止同时从同一对象多次调用MyCommonMethod,但是如果多个对象同时具有相同的'路径',则可能会失败。你确定每个'path'只有一个对象吗? – porges 2012-03-22 02:52:19

+0

'//某些操作'代码是否会导致MyCommonMethod再次被调用(可能是间接的)? – phoog 2012-03-22 02:53:05

回答

2

如果你需要这个跨多个安全类的情况下,你需要让你的私人锁定变量static

private static object lockObject = new object(); 
+0

感谢Adam,我一定会尝试这个,还有一件事 - 它会创建与内存管理有关的任何问题,我是否需要处理它?或任何其他问题 – 2012-03-22 07:19:30

+0

@RaoBHavik:不,您没有在代码中使用任何'IDisposable'对象。 – 2012-03-22 14:09:39

+0

感谢亚当,这是工作。 – 2012-03-26 07:16:36

0

删除所有的呼叫,锁定和试图改变这样的代码:

private void MyCommonMethod() 
    { 
     lock (this.lockObject) 
     { 
      var element = XElement.Load(path); 
      // some operations 
      element.save(path); 
     } 
    }