繁体   English   中英

启动画面+主窗口

[英]Splash screen + Main window

我有一个C#应用程序,当我在加载主窗口之前使用启动画面时,在涉及多线程/后台工作程序时会遇到麻烦。

我的代码看起来像这样:

[STAThread]
private static void Main()
{

.. do some stuff

ShowSplash(); // where i show a splash screen and load some stuff

...

作为ShowSplash的最后一步,我执行以下操作:

new MyCabApplication<MyMainWorkItem, MDIParentForm>().Run(); -- where i load the form through cab.

问题是当我这样做时,出现以下异常:

在单个线程上启动第二个消息循环是无效操作。 使用Form.ShowDialog代替

知道该怎么办吗?

这是我的showsplash函数:

 private static DialogResult ShowSplash(AutoResetEvent controller)
 {
     // create and register splash screen
     splashScreen = new PointSplashScreen();
     Application.Run(splashScreen);
     return DialogResult.OK;
 }

两种解决方案:

  1. 无需使用Application.Run ,只需创建表单的新实例,然后调用ShowDialog 移动new MyCabApplication<MyMainWorkItem, MDIParentForm>().Run(); 调用ShowDialog()之后在启动屏幕之外。 如果不总是运行此代码,则可以检查“启动”屏幕的属性。
  2. 代替使用Application.Run(Form) ,使用Application.Run(ApplicationContext) 您将需要创建一个新的ApplicationContext并将代码移到那里。

解决方案1比较容易。

听起来MyCabApplication扩展了Application Run方法通过启动处理窗口消息的消息循环来启动WinForm应用程序。

因为您已经在显示UI,所以已经在运行一个消息循环,因此您无法启动另一个。 要显示您的主窗体,请为其创建一个新实例,然后调用Show()

var form = new MainForm();
form.Show();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM