2012-03-22 5 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

このファイルを使用している他のプロセスはありますか? –

+1

これは同時に同じオブジェクトからの 'MyCommonMethod'への複数の呼び出しを防ぎますが、同時に複数のオブジェクトが同じ' path'を持つ場合、これは失敗する可能性があります。 'path'ごとにオブジェクトが1つしかないことを保証しますか? – porges

+0

'//some operations'コードは、MyCommonMethodを(おそらくは間接的に)呼び出すことができる何かをしますか? – phoog

答えて

2

あなたは複数のクラスのインスタンス間で安全であることを、これを必要な場合は、あなたがあなたのプライベートロック変数staticを作成する必要があります。

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

ありがとうアダム、私は確かにこれをもう1つ試してみましょう - それはメモリ管理に関連する問題を作成する、私はそれを処分する必要がありますか?またはその他の問題 –

+0

@RaoBHavik:いいえ、コード内にIDisposableオブジェクトを使用していません。 –

+0

アダムさん、ありがとうございます。 –

0

ロックし、このようなあなたのコードを変更しようとするすべての呼び出しを削除します。

private void MyCommonMethod() 
    { 
     lock (this.lockObject) 
     { 
      var element = XElement.Load(path); 
      // some operations 
      element.save(path); 
     } 
    } 
関連する問題