1

Blend 4を使用してwpfアプリケーションに取り組んでいます。特定の条件下では、アプリを再起動する必要があります。

現在、次のコードを使用しています。

System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
System.Threading.Thread.Sleep(1000);
Application.Current.Shutdown();

動作します。

私の問題は、新しいインスタンスがロードされる前に現在のインスタンスが閉じて、プログラムがクラッシュしたように見えることです。thread.sleep を使用してシャットダウンを停止しましたが、タイミングが異なります。

現在のプロセスをシャットダウンする前に、新しいプロセスが開始するのを待つ方法はありますか?

次の行に沿ったもの:

System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);

if (newProcess.IsLoaded == true)
{
    Application.Current.Shutdown();
}

編集:

これは、設定が変更されたときのコンテキストです。変更を適用するには、アプリケーションを再起動する必要があります。スプラッシュ スクリーンを使用して (新しい設定の適用はお待ちください)、新しいプロセスが読み込まれるまで表示されます。

4

3 に答える 3

2

それはどうですか:古いプロセスIDを開始パラメータとして新しいインスタンスに渡し、新しいインスタンスがロードされたときに古いプロセスを強制終了させます。

メソッドを使用Process.GetCurrentProcessして、古いインスタンス pid を読み取ります。Argumentsのプロパティを使用して、パラメータを新しいインスタンスに渡しますProcessStartInfo。次にProcess.GetProcessById、新しいインスタンスで使用して、引数が渡されたときに古いインスタンスを取得して強制終了します。

于 2012-07-30T10:45:38.507 に答える
-1
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    Process[] myProcess = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName); 
    foreach (Process process in myProcess) 
    {
        if (process.Id != Process.GetCurrentProcess().Id)
        {
            process.Kill();
        }
    } 
}
于 2012-07-30T11:17:55.610 に答える