C# 代码运行时,进度条(选框)消失

C# 代码运行时,进度条(选框)消失,c#,C#,我有一个带有按钮和进度条的简单表单。用户单击按钮开始处理,并且在代码运行时,进度条会显示动画。在这种情况下,它只是一个for循环。但问题是进度条只出现了几分之一秒,然后就消失了 private void button1_Click(object sender, EventArgs e) { progressBar1.Style = ProgressBarStyle.Marquee; progressBar1.MarqueeAnimationSpeed = 100; fo

我有一个带有按钮和进度条的简单表单。用户单击按钮开始处理,并且在代码运行时,进度条会显示动画。在这种情况下,它只是一个for循环。但问题是进度条只出现了几分之一秒,然后就消失了

private void button1_Click(object sender, EventArgs e)
{
    progressBar1.Style = ProgressBarStyle.Marquee;
    progressBar1.MarqueeAnimationSpeed = 100;

    for (int i = 0; i < 3; i++) { Thread.Sleep(1000); } // sleep 3 times for 1 second

}
private void按钮1\u单击(对象发送者,事件参数e)
{
progressBar1.Style=ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed=100;
对于(inti=0;i<3;i++){Thread.Sleep(1000);}//睡眠3次,持续1秒
}
我假设发生这种情况是因为代码继续后重新绘制了帧?因此,我尝试在另一个线程上运行for循环,但这似乎并不重要

循环运行时,如何使条形图设置动画


谢谢

您可以通过在循环的每次迭代中包含对Application.DoEvents()的调用来解决此问题

但这并不是实现这一目标的最佳途径

推荐的方法是在另一个线程内处理循环,如BackgroundWorker,使progressbar在主线程上保持动画


您可以在这里得到一些解释:

您可以通过在循环的每个迭代中包含对Application.DoEvents()的调用来解决这个问题

但这并不是实现这一目标的最佳途径

推荐的方法是在另一个线程内处理循环,如BackgroundWorker,使progressbar在主线程上保持动画


你可以在这里得到一些解释:

我说要更多地提升后台工作人员。这真的是最好的方法go@gunr2171最好的方法是利用
async
关键字。但是,是的,
BackgroundWorker
比调用
DoEvents
@DanielMann要好得多,
DoEvent
正如我所看到的那样,没有任何作用。我说的是
BackgroundWorker
,因为在线程之间传递对象的框架已经存在,同时(最重要的部分)发送关于进度更改的状态消息。我说的是提升BackgroundWorker更多。这真的是最好的方法go@gunr2171最好的方法是利用
async
关键字。但是,是的,
BackgroundWorker
比调用
DoEvents
@DanielMann要好得多,
DoEvent
正如我所看到的那样,没有任何作用。我之所以说
BackgroundWorker
,是因为在线程之间传递对象的框架已经存在,并且(最重要的部分)发送关于进度更改的状态消息。