在C#中尝试制作一个小游戏类型的程序,我试图制作一个使用进度条的加载栏,文本正在使用标签,例如进度条是1 - 25,我想要标签文本在条形图更新时,这是一个例子:
private void StartLoading_Click(object sender, EventArgs e)
{
MainProgressBar.Maximum = 25;
int P = 0;
while (P < 25)
{
// Delay
System.Threading.Thread.Sleep(130);
// Increase Progress
P++;
// Set Progress Bar Value
MainProgressBar.Value = P;
// Set Text Above Progress Bar
LoadingText.Text = P + "/25";
}
}
聚苯乙烯。我不想要一些巨大的代码,我希望它像这样简单
答案 0 :(得分:1)
现有技术是您的代表:
private void StartLoading_Click(object sender, EventArgs e)
{
const int max = 25;
var progressHandler = new Progress<int>(value=>{
LoadingText.Text = value + "/" + max;
MainProgressBar.Value = value;
});
var progress = progressHandler as IProgress<int>;
await Task.Run(() =>
{
int P = 0;
while (P < 25)
{
Thread.Sleep(130);
progress?.Report(++P);
}
}
}
这将处理您长时间运行的任务(在本例中为Sleep),在单独的Thread中并通过Progress-Class重用该值。这样您的GUI就会按照建议在GUI-Thread中更新,您将相应地获得更新。此外,不建议使用Application.DoEvents();
,因为您必须了解许多pitfalls。