環境 - C#、.NET 4.0、WPF、VS2010
キーボードフックを使用して、4 つのキーの組み合わせが押されたことを検出するアプリがあります。これが発生すると、myConfigDataSet.WriteXml(myConfigFile) への呼び出しを持つ Configuration.Save() が呼び出されます。そして、次の行で App.Current.Shutdown() を呼び出します。
約半分の時間で、期待どおりに動作します。しかし、多くの場合、既存の構成ファイルの途中に XML コンテンツが挿入され、結果としてデータが破損していました。
を使用して上記の問題を修正できました...
if(File.Exists(myConfigFile)) { File.Delete(myConfigFile) }
... myConfigDataSet.WriteXml(myConfigFile) への呼び出しのすぐ上の行
しかし、今では多くの場合、0KB サイズのファイルを書き込むだけです。私の問題はすべて、 App.Current.Shutdown() が myConfigDataSet.WriteXml(myConfigFile) の呼び出しが完了するのを待っていないことが原因であると確信しています。
ファイルがディスクに書き込まれるまで、この呼び出しは実行をブロックすべきではありませんか? ...どうやらそうではありません!!!
回避策として、App.Current.Shutdown の直前に Thread.Sleep(1000) を挿入して 1 秒の遅延を作成しようとしました。しかし、今ではアプリが「StackOverFlow」例外でエラーになることがあります...!!!
これに対する修正または回避策として何をお勧めしますか? 私は何を間違っていますか?