WPF-更新ProgressBar问题

问题描述 投票:0回答:1

我正在尝试使用ProgressBar,这对我来说是新的(只能异步进行?)

我遵循了WPF-Tutorial,并没有遇到任何问题。我只是将代码再次放在此处以方便使用。

public partial class ProgressBarTaskOnWorkerThread : Window
{
    public ProgressBarTaskOnWorkerThread()
    {
        InitializeComponent();
    }

    private void Window_ContentRendered(object sender, EventArgs e)
    {
        BackgroundWorker worker = new BackgroundWorker();
        worker.WorkerReportsProgress = true;
        worker.DoWork += worker_DoWork;
        worker.ProgressChanged += worker_ProgressChanged;

        worker.RunWorkerAsync();
    }

    void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        for(int i = 0; i < 100; i++)
        {
            (sender as BackgroundWorker).ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        pbStatus.Value = e.ProgressPercentage;
    }
}

所以我只是使用并使用了该代码,所以没有问题。现在,我试图在我的代码中使用它,并且只修改了worker_DoWork函数,如下所示:

    void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        while (this.ValueProgress < 100)
        {
            (sender as BackgroundWorker).ReportProgress(this.valueProgress);
            Thread.Sleep(200);
        }
    }

在我的代码中,我导入文件列表,所以我将this.ValueProgress设置为0,然后每次导入文件时,我都这样做。ValueProgress= 100 * NumberImportedFiles / TotalFiles;

[我还注意到,在调试中,我的worker_ProgressChanged函数在导入时不起作用(但是worker_DoWork正常工作)。然后,只有在导入所有文件后,才会多次启动worker_ProgressChanged(似乎它只是触发一次完成的所有更改)。

编辑:刚刚进行了另一个“愚蠢”的测试:

我保留了原始代码,添加了条件,因此在编辑ValueProgress后,ProgressBar将开始移动:

void worker_DoWork(object sender, DoWorkEventArgs e)
{
    for (int i = 0; i < 100; i++)
    {
        if(this.ValueProgress==0)
        {
            i--;
        }
        (sender as BackgroundWorker).ReportProgress(i);
        Thread.Sleep(100);
    }
}

并且该代码也不起作用,我的意思是,函数worker_DoWork正常工作,在进程开始后我开始增加,但是ProgressBar没有移动(worker_ProgressChanged未触发)。>>

我正在尝试使用ProgressBar,这对我来说是新的(仅可以异步进行?)我遵循了WPF教程,没有遇到任何问题。我只是将代码再次放在此处以方便商品使用。公共部分...

c# wpf progress-bar
1个回答
0
投票

我没有评论的名声,所以我发布了答案。如果我的某些假设是错误的,我事先表示歉意。您在哪里设置ValueProgress的值?如果您是在UI线程上设置ValueProgress的值而不是使用后台工作,那么您可能在按住UI线程。

© www.soinside.com 2019 - 2024. All rights reserved.