gpt4 book ai didi

c# - 如何在繁忙的循环中显示进度?

转载 作者:可可西里 更新时间:2023-11-01 09:02:35 28 4
gpt4 key购买 nike

我有一个从外部源读取大量数据的循环。该过程大约需要 20 秒,我想向用户显示进度。我不需要任何花哨的进度条,所以我选择将我的进度绘制在一个标签中,上面写着“Step 1/1000”,然后更改为“Step 2/1000”等。

我的代码看起来像这样:

// "count" is the number of steps in the loop, 
// I receive it in previous code

String countLabel = "/"+count.ToString();

for (i = 0; i < count; i++)
{
... do analysis ...
labelProgress.Content = "Step "+i.ToString()+countLabel
}

但是,在该分析过程中,屏幕“卡住”并且进度不显示为正在推进。我从我过去在 C++ 中理解这种行为,在那里我可能会有一个单独的线程显示一个进度条,从循环中接收通知,或者某种形式的重绘/刷新,或者强制窗口/应用程序处理它的消息队列。

在 C# 中执行此操作的正确方法是什么?我不受标签的束缚,所以如果有一个简单的进度条弹出屏幕我可以使用而不是这个标签,那也会很棒......

谢谢

最佳答案

将工作移至 BackgroundWorker并使用 ReportProgress方法。

for (i = 0; i < count; i++)
{
... do analysis ...
worker.ReportProgress((100 * i) / count);
}

private void MyWorker_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
taskProgressBar.Value = Math.Min(e.ProgressPercentage, 100);
}

关于c# - 如何在繁忙的循环中显示进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1194620/

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