簡體   English   中英

從WPF中的后台工作者更新進度條

[英]Update progressbar from a backgroundworker in WPF

我正在嘗試使用BackgroundWorker進行進度條前進。 最終目標是顯示后台搜索的進度,但我首先想要通過簡單的模擬來了解進度條。 這是代碼:

    public MainWindow()
    {
        InitializeComponent();

        worker = new BackgroundWorker(); // variable declared in the class
        worker.WorkerReportsProgress = true;
        worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
        worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    }

    private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        this.Title += " DONE";
    }

    private void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        for(int j = 0; j <= 100; j++)
        {
            worker.ReportProgress(j);
            Title += j.ToString();
            Thread.Sleep(50);
        }
    }

    void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        searchProgressBar.Value = e.ProgressPercentage;
    }

但是當我運行它時,它會直接跳到最后,而不會以任何方式改變進度條。 當我逐步調試它時,我得到的最后一步是worker.ReportProgress(j); ,然后控制返回程序並worker_RunWorkerCompleted 為什么?

你忘了跑工人了:

     worker.RunWorkerAsync();

如果您嘗試更改UI content ,則應將調用放在UI Dispatcher can't modify UI objects from background thread 用這些替換你的線 -

App.Current.Dispatcher.Invoke((Action)delegate()
        {
            Title += j.ToString();
        });

App.Current.Dispatcher.Invoke((Action)delegate()
        {
            Title = "Done";
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM