【发布时间】:2011-04-27 13:21:18
【问题描述】:
我想在控制台应用程序中间显示一个表单,以显示一些状态信息,并在发生特定事件时自动关闭该表单。以下代码部分是否足以满足此目的?
显示表单
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();
}
}
【问题讨论】:
-
您是在自己的线程上运行表单吗?
-
我不明白这个问题。我错过了什么吗?
-
@Maanu:(扩展 Lasse 评论)使用 ShowDialog 的问题是线程的执行被阻塞,直到表单关闭。因此,如果您只有一个线程,则该表单将永远不会被同一线程中触发的事件关闭...
-
@digEmAll: ShowDialog 将从一个线程调用,OnModuleInitializationCompleted 将由一个线程池线程调用
-
@Jodrell 在托管代码中没有真正的“控制台应用程序”。相反,“控制台应用程序”可以写入控制台并显示 Winforms/WPF 窗口(如果它想要并且已经引用了正确的程序集)。不同之处在于,如果您选择“控制台应用程序”作为输出,则始终显示控制台,即如果应用程序未从控制台启动,则会打开它。