我们要在主窗口上创建并启动模态对话框框。由于某种原因,此过程是从其他线程启动的。这个不同的线程调用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/