进度条值为C时,C#标签文本未更新

时间:2017-01-12 12:15:23

标签: c#

在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";
        }
    }

聚苯乙烯。我不想要一些巨大的代码,我希望它像这样简单

1 个答案:

答案 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