2012-03-22 58 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); 
     } 
    } 
相關問題