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。
相关推荐
CryptoRzz6 分钟前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
Never_Satisfied28 分钟前
在JavaScript / HTML中,div容器在内容过多时不显示超出的部分
开发语言·javascript·html
艾莉丝努力练剑1 小时前
【C++STL :stack && queue (一) 】STL:stack与queue全解析|深入使用(附高频算法题详解)
linux·开发语言·数据结构·c++·算法
胡萝卜3.01 小时前
深入理解string底层:手写高效字符串类
开发语言·c++·学习·学习笔记·string类·string模拟实现
西柚小萌新2 小时前
【Python从入门到精通】--Pycharm增加内存
开发语言·python·pycharm
不爱编程的小九九2 小时前
小九源码-springboot082-java旅游攻略平台
java·开发语言·旅游
只是懒得想了2 小时前
用C++实现一个高效可扩展的行为树(Behavior Tree)框架
java·开发语言·c++·design-patterns
yan8626592462 小时前
于 C++ 的虚函数多态 和 模板方法模式 的结合
java·开发语言·算法
Small___ming2 小时前
【Python基础】Python路径操作全解析:os.path、glob与pathlib从入门到精通
开发语言·python
云草桑2 小时前
.net AI MCP 入门 适用于模型上下文协议的 C# SDK 简介(MCP)
ai·c#·.net·mcp