c# - .gif 在整个循环结束之前不会动画?

标签 c# multithreading winforms picturebox

我尝试通过循环在运行时 winform 中添加 300 个按钮。这需要很多时间,所以我想在循环运行时显示 .gif 加载图像。 load.gif 只是显示,但在循环结束之前不会显示动画。这是为什么?

pictureBox1.Load("loading.gif");
pictureBox1.Invalidate();
pictureBox1.Update();

// loop to add buttons
this.SuspendLayout();
for (int i = 0; i < 300; i++)
    // add buttons
this.ResumeLayout();
this.PerformLayout();

最佳答案

循环会阻塞 UI 线程,因此 pictureBox1 不会更新。有几种可能性可以解决这个问题:

丑陋的:在按钮创建循环中时不时(即不是每一轮)使用 Application.DoEvents();

或者您可以通过计时器创建按钮,每次 10 或 20 个,直到达到 300 个。

或者您可以使用基于线程的启动屏幕。然而,重要的是所有按钮都是由 UI 线程创建的。

或者找到不需要 300 个按钮的更好解决方案。

关于c# - .gif 在整个循环结束之前不会动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407211/

相关文章:

c# - 如何解析带有过滤参数的集合?

c# - 使用c#在Excel中生成动态生成的范围名称

java - 如何使用 Swing 暂停 Java 模拟

multithreading - 锁定多个读者单个作家

c++ - Visual Studio 2017 - 找不到 Visual C++ Windows 窗体

c# - 该进程无法访问文件 'D:.txt',因为它正在被 c# 中的另一个进程使用

c# - Lambda 表达式和存储过程

python - 帮助为 GUI 进度添加线程

c# - 属性更改后何时调用方法

c# - 获取图表/表格的下一种颜色?