私は 2 つのプログラムを持っています。1 つは XXXX.xml をシリアル化し、もう 1 つは XXXX.xml.temp ファイルを逆シリアル化します。2 つのプログラムは個別であり、定義済みの間隔ごとに発生する異なるスレッドを使用します。
以下は、xml を読み取るコードです。ここで、次の例外が発生します。
別のプロセスで使用されているため、プロセスはファイル '' にアクセスできません。
private void StartDiskFlushThread()
{
_flushThread = new Thread(ThreadProc);
_flushThread.IsBackground = true;
_flushThread.Start();
}
private void ThreadProc()
{
try
{
while (_flushThread.IsAlive)
{
FlushStepsToFile();
Thread.Sleep(_flushInterval);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
Log.Error("ThreadProc failed", ex);
}
}
private void FlushStepsToFile()
{
try
{
SerializeSteps(1);
}
catch (Exception ex)
{
Log.Error("Failed to flush steps to disk, retrying", ex);
Thread.Sleep(1000);
SerializeSteps(2);
}
}
private void SerializeSteps(int trycount)
{
XmlSerializer serializer = new XmlSerializer(typeof(DetailedSteps));
try
{
using (TextWriter textWriter = new StreamWriter(_targetFileLocation))
{
serializer.Serialize(textWriter, _detailedSteps);
}
}
catch (Exception ex)
{
Log.ErrorFormat("SerializeSteps method failed. try #{0}. Error:{1}", trycount, ex);
}
}
xmlを読み取るコードについては。このプログラムは、XXXX.xml を XXXX.xml.temp にコピーし、一時ファイルを読み取るスレッドでもあります。
private void CopyPartialLog()
{
try
{
File.Copy(ReportFile, DestReportFile, true);
}
catch (Exception ex)
{
Log.Error("CopyPartialLog failed", ex);
}
}
私は別のファイルを読んでいるので、例外はありません: XXXX.xml.temp
以下は、xml を書き込む最初のプログラムから得られる例外です。
7077846 [SerializeSteps メソッドが失敗しました。#1を試してください。Error:System.IO.IOException: 別のプロセスで使用されているため、プロセスはファイル 'xxxx.xml' にアクセスできません。System.IO.__Error.WinIOError (Int32 errorCode、文字列の多分フルパス) で System.IO.FileStream.Init (文字列パス、FileMode モード、FileAccess アクセス、Int32 権限、ブール値の useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBUTES secAttrs 、文字列 msgPath、ブール値 bFromProxy)
私が取得している例外は、ライター スレッドをハングアップさせることであり、その理由がわかりません。何を指示してるんですか?どうすれば解決できますか?