我试图使启动画面先出现,然后启动画面MainForm出现。但是我在初始屏幕中显示的进度条没有到达进度条的末尾。并且该程序继续运行,无法正常工作。
MainForm
加载主表单期间如何显示初始屏幕?
我的代码是这样的:
public partial class SplashForm : Form { public SplashForm() { InitializeComponent(); } private void SplashForm_Load(object sender, EventArgs e) { timer1.Enabled = true; timer1.Start(); timer1.Interval = 1000; progressBar1.Maximum = 10; timer1.Tick += new EventHandler(timer1_Tick); } public void timer1_Tick(object sender, EventArgs e) { if (progressBar1.Value != 10) { progressBar1.Value++; } else { timer1.Stop(); Application.Exit(); } } }
这是的代码的第一部分MainForm:
public partial class MainForm : Form { public MainForm() { InitializeComponent(); Application.Run(new SplashForm()); } }
有多种创建初始屏幕的方法:
您可以依靠的启动画面功能 WindowsFormsApplicationBase
WindowsFormsApplicationBase
您可以通过在其他UI线程上显示表单并将表单成功加载到主窗口后隐藏起来,来亲自展示实现该功能。
在这篇文章中,我将展示两种解决方案的示例。
注意:那些正在寻找在数据加载期间显示加载窗口或gif动画的人,可以看看这篇文章:在其他线程中加载数据期间显示加载动画
选项1-使用WindowsFormsApplicationBase启动画面功能
Microsoft.VisualBasic.dll
MyApplication
OnCreateMainForm
覆盖OnCreateSplashScreen并将要显示为初始屏幕的表单分配给SplashScreen属性。
OnCreateSplashScreen
SplashScreen
在您的Main方法中,创建的实例MyApplication并调用其Run方法。
Main
Run
例
using System; using System.Windows.Forms; using Microsoft.VisualBasic.ApplicationServices; static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); var app = new MyApplication(); app.Run(Environment.GetCommandLineArgs()); } } public class MyApplication : WindowsFormsApplicationBase { protected override void OnCreateMainForm() { MainForm = new YourMainForm(); } protected override void OnCreateSplashScreen() { SplashScreen = new YourSplashForm(); } }
选项2-使用其他UI线程实施功能
您可以通过在其他UI线程中显示初始屏幕来自己实现此功能。为此,您可以Load在Program课堂上订阅主窗体的事件,并在那里显示和关闭初始屏幕。
Load
Program
using System; using System.Threading; using System.Windows.Forms; static class Program { static Form SplashScreen; static Form MainForm; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Show Splash Form SplashScreen = new Form(); var splashThread = new Thread(new ThreadStart( () => Application.Run(SplashScreen))); splashThread.SetApartmentState(ApartmentState.STA); splashThread.Start(); //Create and Show Main Form MainForm = new Form8(); MainForm.Load += MainForm_LoadCompleted; Application.Run(MainForm); } private static void MainForm_LoadCompleted(object sender, EventArgs e) { if (SplashScreen != null && !SplashScreen.Disposing && !SplashScreen.IsDisposed) SplashScreen.Invoke(new Action(() => SplashScreen.Close())); MainForm.TopMost = true; MainForm.Activate(); MainForm.TopMost = false; } }
注意:要显示平滑的边缘自定义形状的初始屏幕,请查看以下文章:Windows Forms Transparent Background Image。