1

我有一个应用程序。

首先我显示一个闪屏,一个表单,这个闪屏会调用另一个表单。

问题:当显示启动画面时,如果我在启动画面上方打开另一个应用程序,然后最小化这个新打开的应用程序窗口,启动画面变成白色。我该如何避免这种情况?我希望我的启动画面清晰地显示并且不受任何应用程序的影响。

4

3 回答 3

5

您需要在不同的线程中显示初始屏幕 - 当前您的新表单加载代码正在阻塞初始屏幕的 UI 线程。

启动一个新线程,并在该线程上创建启动画面并调用Application.Run(splash). 这将在该线程上启动一个新的消息泵。然后,您需要让主 UI 线程在准备就绪时回调到启动屏幕的 UI 线程(例如,使用 Control.Invoke/BeginInvoke),以便启动屏幕可以自行关闭。

重要的是确保您不要尝试从错误的线程修改 UI 控件 - 仅使用创建控件的那个。

于 2008-12-25T13:21:40.513 回答
3

.NET 框架对启动画面具有出色的内置支持。启动一个新的WF项目,Project + Add Reference,选择Microsoft.VisualBasic。添加一个新表单,将其命名为 frmSplash。打开 Project.cs 并使其看起来像这样:

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;

namespace WindowsFormsApplication1 {
  static class Program {
    [STAThread]
    static void Main(string[] args) {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      new MyApp().Run(args);
    }
  }
  class MyApp : WindowsFormsApplicationBase {
    protected override void OnCreateSplashScreen() {
      this.SplashScreen = new frmSplash();
    }
    protected override void OnCreateMainForm() {
      // Do your time consuming stuff here...
      //...
      System.Threading.Thread.Sleep(3000);
      // Then create the main form, the splash screen will close automatically
      this.MainForm = new Form1();
    }
  }
}
于 2008-12-26T15:11:06.140 回答
1

我有一个类似的问题,你可能想看看。我得到的Stack Overflow 答案对我来说非常完美 - 你可能想看看。

于 2008-12-26T00:53:39.710 回答