2

別のスレッドで動作するいくつかの Client オブジェクト (TCPClient ラッパー) があります。これらのオブジェクトのいずれかで問題が発生すると、エラー メッセージが XML エラー ログに保存されます。明らかに、ファイル アクセスは一度に 1 つのプロセスに制限されているため、別のスレッドが使用している間、他のスレッドが読み書きできないようにする方法が必要です。

私は現在lockメソッドを使用していますが、別のプロセスがファイルを使用しているという例外がまだスローされています。lock私は、待機と再試行を管理するという印象を受けました。

// Lock the XML IO for safety due to multi-threading
lock (this.xmlDoc) // Changed from this to the xmlDoc
{
    // Attempt to load existing xml
    try
    {
        this.xmlDoc.Load(this.logPath);
    }
    catch (FileNotFoundException e)
    {
        // xml file doesn't exist, create
        this.xmlDoc.AppendChild(this.xmlDoc.CreateElement("root"));
    }
    // Get the doc root
    XmlElement root = this.xmlDoc.DocumentElement;
    // Create message entry
    XmlElement msg = this.xmlDoc.CreateElement("message");
    // Add <time></time> to msg
    msg.AppendChild(this.xmlDoc.CreateElement("time")).InnerText = dt.ToString();
    // Add <error></error> to msg
    msg.AppendChild(this.xmlDoc.CreateElement("error")).InnerText = message;
    // Add msg to root
    root.AppendChild(msg);
    // Save. Done.
    this.xmlDoc.Save(this.logPath);
}
4

2 に答える 2