最顶级属性设置为true的模式对话框在新线程中显示时不会显示为最顶级。示例代码:在新线程中显示模态对话框(最顶部)
Thread thread = new Thread(KickOffForm);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
private void KickOffForm(object state)
{
Thread.Sleep(5000); // Mimics logic that takes place before form is shown
var form = new Form2();
form.ShowDialog();
}
如果窗体在线程的开始处实例化,则模式对话框将显示为最顶部。示例代码:
Thread thread = new Thread(KickOffForm);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
private void KickOffForm(object state)
{
var form = new Form2();
Thread.Sleep(5000); // Mimics logic that takes place before form is shown
form.ShowDialog();
}
上述代码在exe启动时实例化的类中执行。
为什么表单会在线程开始时实例化时显示为最顶层,而如果稍后实例化则不显示。
这是你永远不希望显示在另一个线程窗口的确切原因。使用Control.Invoke()将其显示在UI线程上。 –