0

だから私は.NET4.0で書かれたWPFアプリケーションを持っています。アプリケーションには、XMLファイルを検索するOpenFileDialogを実行するインポートボタンがあります。ファイルを開いた後、XMLを読み取り、そこからデータを取得して、Properties.Settings.Defaultに格納します。基本的には、設定をエクスポートおよびインポートできるシステムです。うまく機能します。

さて、私がやりたいのは、インポート後に新しい設定を保存し、アプリケーションを強制終了して再起動することです。シンプル、設定の保存、アプリの新しいインスタンスの起動、古いインスタンスの強制終了。

Properties.Settings.Default.Save();
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
System.Diagnostics.Process.GetCurrentProcess().Kill();

ただし、問題は、多くの場合、アプリの新しいインスタンスの開始が、設定の保存が完了する前であるということです。そのため、新しいインスタンスは古い設定の取得を開始します。プロセスに単純なスリープを追加することで、これを解決できると思いました。しかし、これは非常にハッキーです。

System.Threading.Thread.Sleep(1000);

保存プロセスに1000ミリ秒以上かかる場合はどうなりますか?その後、古い問題が引き続き発生します。スリープタイマーを増やすことはできますが、もっと良い方法が必要だと確信しています。最初の行が終了するまで最後の2行がアクティブにならないようにする方法はありますか?

4

2 に答える 2

1

Save非同期であることを聞いたことがありません。最後の手段としてFileSystemWatcher、影響を受けるファイルを監視し、変更がなくなったときにコードを呼び出すことができます。

于 2012-08-16T00:51:27.500 に答える
0

保存が完了したときにsaveメソッドに戻りを実行させるか、ProcessStartを呼び出させてみませんか。その場合、最初の保存が完了するまでアプリを起動できないはずです。

于 2012-08-16T00:44:49.000 に答える