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。
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忒可君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值