在控制台应用程序中的特定点(在执行过程中)显示表单

本文关键字:执行 过程中 表单 显示 应用程序 控制台 | 更新日期: 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…

享受吧!