0

を使用して別のスレッドで wpf UI を開いています

helperThread = new Thread(() =>
{
     //ShowHelpInDialog(e.Url, -1, -1, -1, -1, e.HelpContext);
     //System.Windows.Threading.Dispatcher.Run();
     dispatcher.Invoke(new Action(() => ShowHelpInDialog(e.Url, -1, -1, -1, -1, e.HelpContext)));

});
helperThread.SetApartmentState(ApartmentState.STA);
helperThread.IsBackground = true;
helperThread.Start();

ダイアログクローズイベント中に、私は呼び出しています

Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);

これにより、メインスレッド/アプリケーションが閉じられますが、これは望ましくありません。

親アプリケーションを閉じたくありません。

4

2 に答える 2

1

Window別のスレッドから新しいスレッドを開く方法については、次の例を参照してください。

private void NewWindowHandler(object sender, RoutedEventArgs e)
{       
    Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
    newWindowThread.SetApartmentState(ApartmentState.STA);
    newWindowThread.IsBackground = true;
    newWindowThread.Start();
}

private void ThreadStartingPoint()
{
    Window1 tempWindow = new Window1();
    tempWindow.Show();       
    System.Windows.Threading.Dispatcher.Run();
}

Threading ModelMSDNのページの複数のウィンドウ、複数のスレッドのセクションから。

更新 >>>

このコードは 100% テストされており、間違いなくWindow新しいスレッドで新しいスレッドが開きます。他の をシャットダウンしたくない場合は、シャットダウンするメソッドをWindow呼び出さないでください。MAINスレッド(が実行されている場所)で実行されているものを呼び出しています。BeginInvokeShutdownWindowDispatcher.CurrentDispatcherMainWindow.xaml

于 2013-09-04T11:57:13.870 に答える