在控制台应用程序中的特定点(在执行过程中)显示表单
本文关键字:执行 过程中 表单 显示 应用程序 控制台 | 更新日期: 2023-09-27 17:53:30
我想在控制台应用程序中间显示一个表单,以显示一些状态信息,并在发生特定事件时自动关闭该表单。以下代码部分是否足以满足此目的?
显示表单
ModuleInitializerForm moduleInitializerDlg = new ModuleInitializerForm()
{
Parent = parent,
TopMost = true,
TopLevel = true,
Text = Common.MESSAGE_INFO_TITLE,
ControlBox = false,
FormBorderStyle = FormBorderStyle.FixedDialog,
KeyPreview = false,
};
moduleInitializerDlg.Initialize();
moduleInitializerDlg.ShowDialog();
关闭表单
public void OnModuleInitializationCompleted(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new ECEventsHandler(OnModuleInitializationCompleted), sender, e);
}
else
{
this.Close();
}
}
由于您正在使用ShowDialog(),执行此操作的线程将被阻塞,直到用户(或您)关闭表单。
注意,如果您使用Show()代替,线程将继续。然而,如果没有人在该线程上发送窗口消息,则窗体将"死亡",即它不会响应任何内容。如果你是从一个普通的主机应用项目开始,那么就会出现这种情况。如果您使用ShowDialog(),它将创建一个本地消息循环,以便窗口响应。
所以你需要有一个单独的线程为Windows窗体UI在那里你显示表单。我将使用Application.Run(moduleInitializerDlg);
而不是ShowDialog(),因为据我所知,它可以更好地设置/拆除消息泵架构。这个调用会像ShowDialog()一样阻塞线程。
进入表单的属性,它应该在点击时打开…到布局部分,把开始位置设置为中屏,或者如果你有一个父元素,你想每次停靠它,使用CenterParent…
享受吧!