首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現啟動畫面:主表單 Load 事件顯示 Splash Form、Timer 自動關閉完整模式

     編輯:關於C語言

前言

啟動畫面 讓使用者在應用程式初始化期間看到品牌/進度。標準模式:Program.Main 啟動主表單 → 主表單 Load 事件以 ShowDialog 顯示啟動畫面 → 啟動畫面 Timer 觸發關閉 → 主表單繼續載入。本文完整呈現三步驟代碼。

步驟一:Program.cs 標準啟動

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1()); // 主表單
    }
}

步驟二:主表單 Form1 Load 顯示啟動畫面

public partial class Form1 : Form
{
    private void Form1_Load(object sender, EventArgs e)
    {
        using (var splash = new Form2()) // Form2 為啟動畫面
        {
            splash.ShowDialog(); // 模態顯示,阻塞 Form1 Load 直到關閉
        }
        // 啟動畫面關閉後,繼續 Form1 初始化工作...
    }
}

步驟三:啟動畫面 Form2 實現

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        // 1. 無邊框、背景圖片
        this.FormBorderStyle = FormBorderStyle.None;
        this.BackgroundImage = Image.FromFile("splash.jpg"); // 專案資源或絕對路徑
        this.BackgroundImageLayout = ImageLayout.Stretch;

        // 2. 置中顯示
        this.StartPosition = FormStartPosition.CenterScreen;

        // 3. 啟動計時器 (10 秒後自動關閉)
        timer1.Interval = 10000; // 10 秒
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        // 實際專案:這裡執行初始化工作 (資料庫連線、設定載入、快取預熱)
        // 初始化完成可提前關閉:this.Close();

        // 範例:直接關閉
        this.Close();
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        timer1.Stop(); // 釋放計時器資源
        timer1.Dispose();
    }
}

進階增強方案

現代替代方案 (.NET Core 3.0+ / .NET 5+)

  • WPF:SplashScreen 類別原生支援 (非托管資源、極快顯示)
  • WinForms .NET 5+:Application.SetSplashScreen (實驗性)
  • 自訂啟動專案:獨立 EXE 顯示啟動畫面,主程式啟動後發送 IPC 訊號關閉

總結

經典 WinForms 啟動畫面模式:主表單 Load → ShowDialog(Splash) → Splash Timer/初始化完成 Close → 主表單繼續。關鍵在於 ShowDialog 的模態阻塞特性,保證啟動畫面期間主表單不可見、不可互動。生產環境建議將初始化工作移至背景執行緒,啟動畫面僅負責 UI 顯示與進度回報,避免 UI 凍結。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
需求實現方式
顯示載入進度主表單初始化分步驟,透過事件/回調更新 Splash Form 上的 ProgressBar/Label
非阻塞啟動畫面splash.Show() + 背景執行緒初始化 + Invoke 更新 UI,需處理表單關閉競態
高 DPI 相容啟用 EnableVisualStyles、設定 AutoScaleMode = Dpi、背景圖提供多解析度版本
品牌動畫使用 GIF (PictureBox) 或自訂繪製 OnPaint 實現淡入/淡出
最小顯示時間記錄啟動畫面顯示時間,若初始化過快,Thread.Sleep 補足最小秒數