0

クロススレッドでtxtファイルに到達して書き込みたいのですが、複数のスレッドが同時に同じファイルに到達したいため、ソフトウェアで例外が発生します。例外を回避するためにstreamwriterを呼び出すにはどうすればよいですか?これが私のコードです:

void WriteLog(string LogStr)
{
    StreamWriter sw = new StreamWriter("Log.txt", true);
    sw.WriteLine(LogStr);
    sw.Close();
}

スレッドでWriteLogメソッドを呼び出します。

ありがとうございました。

4

3 に答える 3

2

あなたはMutexを使おうとすることができます:

private Mutex mut = new Mutex(); // Somewhere in mail class
void WriteLog(string LogStr)
{
    mut.WaitOne();
    try 
    {
        using(StreamWriter sw = new StreamWriter("Log.txt", true))
            sw.WriteLine(LogStr);
    } 
    finally 
    {
        mut.ReleaseMutex();
    }
}
于 2012-04-12T07:15:30.240 に答える
0

Mutexクラスを使用します。

Mutex mut = new Mutex();
于 2012-04-12T07:17:37.150 に答える
0

ログを待ちたくない場合(論理的に聞こえるだけです)、ログメッセージを同期キュー(.net 4から入手可能)にプッシュし、バックグラウンドスレッドにすべてのログ書き込みを処理させる必要があると思います。ミューテックスとロックを使用すると、パフォーマンスが低下します。メモリキューでの書き込みは、ファイルの書き込みよりもはるかに高速です。

于 2012-04-12T07:22:40.127 に答える