C# winform 加载窗体有卡顿,可以先显示动画,等窗体全部加载完成,在显示窗体,关闭动画

C# winform 加载窗体有卡顿,可以先显示动画,等窗体全部加载完成,在显示窗体,关闭动画

要在C# WinForms应用程序中实现加载动画,并在主窗体完全加载后显示主窗体并关闭加载动画,您可以使用以下步骤:

  1. 创建一个简单的加载窗体(Splash Screen),用于显示加载动画。
  2. 在主窗体的构造函数或 Load 事件中显示加载窗体。
  3. 在主窗体完全初始化后隐藏加载窗体。

以下是一个简单的示例,演示了如何实现这个过程:

第一步:创建加载窗体(SplashScreen)

首先,创建一个新的WinForms窗体,命名为 SplashScreenForm.cs。在这个窗体上添加一个 PictureBox 控件来显示加载动画(可以是一个GIF动画或者静态图片)。

复制代码
1public partial class SplashScreenForm : Form
2{
3    public SplashScreenForm()
4    {
5        InitializeComponent();
6        this.StartPosition = FormStartPosition.CenterScreen;
7        this.FormBorderStyle = FormBorderStyle.None;
8        this.ShowInTaskbar = false;
9        this.TopMost = true;
10        this.Show();
11    }
12
13    protected override void OnLoad(EventArgs e)
14    {
15        base.OnLoad(e);
16        ShowLoadingAnimation();
17    }
18
19    private void ShowLoadingAnimation()
20    {
21        // 这里可以加载 GIF 或者其他动画效果
22        pictureBox1.Image = Image.FromFile(@"path\to\your\loading.gif");
23    }
24}

第二步:修改主窗体(MainForm)

接下来,修改主窗体(假设名为 MainForm.cs),让它在加载过程中显示加载窗体,并在加载完成后关闭加载窗体。

复制代码
1public partial class MainForm : Form
2{
3    private SplashScreenForm splashScreen;
4
5    public MainForm()
6    {
7        InitializeComponent();
8
9        // 显示加载窗体
10        splashScreen = new SplashScreenForm();
11
12        // 在后台线程中加载数据或其他耗时操作
13        Task.Run(() =>
14        {
15            LoadData(); // 模拟耗时操作
16            Invoke((MethodInvoker)delegate
17            {
18                // 关闭加载窗体
19                splashScreen.Close();
20            });
21        });
22
23        // 确保加载窗体显示在主窗体之前
24        Application.DoEvents();
25    }
26
27    private void LoadData()
28    {
29        // 模拟耗时操作
30        System.Threading.Thread.Sleep(2000);
31    }
32}

注意事项:

  • 确保所有的耗时操作都在后台线程中执行,避免阻塞UI线程。
  • 使用 Application.DoEvents() 可以确保在后台线程执行前UI线程不会阻塞,但是不要过度使用,因为它可能会导致性能问题。
  • 使用 Invoke 方法确保从后台线程安全地更新UI。
相关推荐
小小龙学IT15 分钟前
Go 泛型(Generics)深度解析:从类型参数到生产实践
开发语言·数据库·golang
hold?fish:palm24 分钟前
45 二叉树的右视图
开发语言·c++·算法
MI_farmer27 分钟前
Anaconda 安装在 D 盘但虚拟环境跑到 C 盘,以及 Conda PermissionError: WinError 5 的解决方法
c语言·开发语言·conda
Lost of 程序猿31 分钟前
建造者模式实战:告别“十参数构造函数“的数据导出任务
后端·设计模式·c#·asp.net
“AI国潮设计-小江”34 分钟前
[AIGC实战] 基于Stable Diffusion的潮汕非遗IP自动化生成工作流(附Python批量处理脚本)
开发语言·人工智能·python·prompt·aigc
布莱克6051 小时前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
落魄实习生1 小时前
Agent Scope Java 2.x 系列【1】核心架构
java·开发语言·架构
一水鉴天1 小时前
三套语言:STL SPL/ SQL 20260928(元宝)
开发语言
Sarvartha1 小时前
数组基础知识
java·开发语言
泡海椒2 小时前
金融报表开发:jquick-pdf K 线图 PDF 可视化解决方案
java·开发语言·金融·pdf