wpf - 阻止从其他线程启动WPF对话框

标签 wpf multithreading modal-dialog

我们要在主窗口上创建并启动模态对话框框。由于某种原因,此过程是从其他线程启动的。这个不同的线程调用execute方法-必须阻塞直到对话框关闭。问题是-怎么样?在此代码上,执行不会被阻塞。 Join()调用也无法按预期方式工作。

public void Execute()
{
    Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
    newWindowThread.SetApartmentState(ApartmentState.STA);
    newWindowThread.IsBackground = true;
    newWindowThread.Start();
    // newWindowThread.Join();
}


private void ThreadStartingPoint()
{
    this.ParameterDialog = new ParameterDialog();
    this.ParameterDialog.ShowDialog();
    System.Windows.Threading.Dispatcher.Run();
}

任何想法如何实现这种行为?提前致谢!

最佳答案

当对话框窗口关闭时,您应该关闭调度程序:

public void Execute()
{
    Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
    newWindowThread.SetApartmentState(ApartmentState.STA);
    newWindowThread.IsBackground = true;
    newWindowThread.Start();
    newWindowThread.Join();
}

private void ThreadStartingPoint()
{
    this.ParameterDialog = new ParameterDialog();
    this.ParameterDialog.Closed += ParameterDialog_Closed;
    this.ParameterDialog.ShowDialog();
    System.Windows.Threading.Dispatcher.Run();
}

private void ParameterDialog_Closed(object sender, EventArgs e)
{
    this.ParameterDialog.Closed -= ParameterDialog_Closed;
    Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);
}

关于wpf - 阻止从其他线程启动WPF对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382107/

相关文章:

c# - MVVM、DialogService 和对话结果

c# - ViewModel 属性在其对应的 CustomControl 属性更新时未更新

.net - 在WPF中使用OpenFileDialog时没有文件的文件夹路径?

c# - 拖放时如何删除虚线矩形

php - 一次运行多个 exec 命令(但要等待最后一个完成)

Java/ Spring MVC : provide request context to child threads

javascript - Twitter Bootstrap v3.0.0 不显示模态组件

c# - 如何仅从 WPF MVVM 中的调度程序线程以外的线程更新可观察集合中的属性?

multithreading - 在线程终止之前在线程上调用 CloseHandle() 是否合理?

css - 此模态框的正文内容溢出模态框,我怎样才能使文本保持在模态框内