gpt4 book ai didi

c# - C#实现进度条的正确方法

转载 作者:太空狗 更新时间:2023-10-30 00:16:36 25 4
gpt4 key购买 nike

我正在学习 winforms,我给自己设定了一个简单的目标,即制作一个从空到满的进度条。这是我畸形的尝试:

public partial class Form1 : Form
{
static BackgroundWorker bw = new BackgroundWorker();

public Form1()
{
InitializeComponent();
bw.DoWork += bw_DoWork;
bw.RunWorkerAsync();
}

void bw_DoWork(object sender, DoWorkEventArgs e)
{
for(int i=0; i<100; ++i)
{
progressBar1.PerformStep();
Thread.Sleep(10);
}
}
}

我很确定 Thread.Sleep() 是应该受到谴责的。我如何在这里避免它?

最佳答案

您几乎已经做得对了。 BackgroundWorker 已经内置了报告进度的机制。

public Form1()
{
bw1.WorkerReportsProgress = true;
bw1.ProgressChanged += bw1_ProgressChanged;
bw1.DoWork += bw1_DoWork;

bw1.RunWorkerAsync();
}

private void bw1_DoWork(object sender, DoWorkEventArgs e)
{
var worker = sender as BackgroundWorker;

while (workNotDone)
{
//Do whatever work
worker.ReportProgress(CalculateProgressDonePercentage());
}
}

private void bw1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//This is called on GUI/main thread, so you can access the controls properly
progressBar.Value = e.ProgressPercentage;
}

当然,除非您只是想在不实际报告任何进度的情况下设置进度条的动画,在这种情况下,您可能应该只使用 Marquee 类型,它会自动滚动进度条而无需执行任何操作。或者只是使用带有 Thread.Sleep() 的后台线程。

关于c# - C#实现进度条的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com