0

嗨,我正在尝试在后台显示进度条,代码正在循环,直到找到具有特定名称的文件。

我为此编写了以下代码,但进度条值没有改变。

我应该在下面的代码中更改什么?

public partial class Form1 : Form
{
    BackgroundWorker backgroundWorker1 = new BackgroundWorker();  
    public Form1()
    {
        InitializeComponent();
        progressBar1.Visible = false;
        backgroundWorker1.WorkerReportsProgress = true;

        backgroundWorker1.DoWork +=
            new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.ProgressChanged +=
            new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
        backgroundWorker1.RunWorkerCompleted +=
            new RunWorkerCompletedEventHandler(backgroundWorker1_WorkDone);

    }

    private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
        progressBar1.Visible = true;
    }

    void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        // Your background task goes here
        for (int i = 0; i <= 100; i++)
        {
            // Report progress to 'UI' thread
            backgroundWorker1.ReportProgress(i);
            // Simulate long task


            while (!File.Exists(@"C:\Users\Test.txt"))
            {
                continue;
            }
        }
    }

    void backgroundWorker1_ProgressChanged(object sender,
        ProgressChangedEventArgs e)
    {
        // The progress percentage is a property of e
        progressBar1.Value = e.ProgressPercentage;
    }

    void backgroundWorker1_WorkDone(object sender,
        RunWorkerCompletedEventArgs e)
    {
        progressBar1.Visible = false;
    }
}
4

1 回答 1

1

您的continue代码中的 将简单地继续到while(true)循环的下一次迭代。它不会像您期望的那样回到for循环 - 它只是一遍又一遍地循环在那里。如果它不是后台工作者,它会挂起你的整个程序。因为它是,它只是挂起那个线程。我希望一个 CPU 内核在运行时保持 100%。

话虽如此,虽然这里的目标令人钦佩,但没有好的方法可以实现它。即使您修复了无限循环,您的进度条也会以较低的百分比“完成”(1%、2%、3%、完成)或上升到 100,然后停止更新,但文件尚不存在。

于 2013-09-18T19:04:11.323 回答