C# winform 加载窗体有卡顿,可以先显示动画,等窗体全部加载完成,在显示窗体,关闭动画
要在C# WinForms应用程序中实现加载动画,并在主窗体完全加载后显示主窗体并关闭加载动画,您可以使用以下步骤:
- 创建一个简单的加载窗体(Splash Screen),用于显示加载动画。
- 在主窗体的构造函数或
Load
事件中显示加载窗体。 - 在主窗体完全初始化后隐藏加载窗体。
以下是一个简单的示例,演示了如何实现这个过程:
第一步:创建加载窗体(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。