当前位置: 首页 > article >正文

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。

http://www.kler.cn/a/286024.html

相关文章:

  • 独立站除了Shopify还有什么?
  • el-pagination 下拉条目数最后一个样式改成全部
  • 关于docker错误
  • 3.2、数据结构-数组、矩阵和广义表
  • 广泛运用于各类恶劣环境的三防平板
  • 无人机研学项目技术详解
  • 牛顿迭代法
  • EventBus搭配LifeCycle可能更美味
  • 鸿蒙(API 12 Beta3版)【访问和管理动态照片资源】Media Library Kit媒体文件管理服务
  • 初试构建工具Webpack
  • 数据结构(顺序表、链式表)
  • 微信小程序App实现小车方向控制
  • Webpack中的自定义 loader 的简单实现
  • Python酷库之旅-第三方库Pandas(113)
  • HarmonOS实战开发:Node-API接口适配模块加载指导
  • HTTP/2
  • 讲个SystemVerilog disable语句的坑
  • js实现3d拖拽环绕旋转
  • 基于Material Design风格开源的Avalonia UI控件库
  • 在国产芯片上实现YOLOv5/v8图像AI识别-【4.1】RK3588训练数据时进行图像增强更多内容见视频