2016-03-29 122 views
0

我正在嘗試將進度條添加到我的程序中。添加進度條C#WPF

FileLoadPB.Maximum = mainClass.values.realXPos.Count; 
for (int i = 0; i < mainClass.values.realXPos.Count; ++i) 
{ 
    FileLoadPB.Value += i; 
    ComponentList.Items.Add(new MappedPoint { pointNum = i + 1, xPoint = mainClass.values.realXPos[i], yPoint = mainClass.values.realYPos[i] }); 
} 

我想FileLoadPB進度條來增加由「i」的每個對象添加到我的ListView時間。這有效,但它並沒有真正顯示酒吧的進展。它只在循環的開始處顯示爲空,並且全部和結束。我已經閱讀了BackgroundWorker上的一些內容,但是我不確定如何實現它。

+3

您的問題是,UI線程在執行循環期間被阻塞。考慮使用背景工作者 – schlonzo

+0

我說我已經閱讀過BackgroundWorker,我只是不知道如何在這種情況下實現它。 –

+0

超級簡單的教程http://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners – Claudius

回答

0

下面的代碼僅僅是一個虛擬圖形來說明如何使用BackgroundWorker。希望它有幫助

public partial class MainWindow : Window { 
    BackgroundWorker backgroundWorker = new BackgroundWorker(); 
    List<int> listDummy = new List<int>(); 

    public MainWindow() { 
     InitializeComponent(); 

     backgroundWorker.WorkerReportsProgress = true; 
     backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged; 
     backgroundWorker.DoWork += backgroundWorker_DoWork; 
    } 

    void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { 
     var numberOfItems = 111; 
     for (int i = 0; i < numberOfItems; i++) { 
      listDummy.Add(i); 
      Thread.Sleep(500); 

      backgroundWorker.ReportProgress(Convert.ToInt32((double)i/numberOfItems * 100)); 
     } 
    } 

    void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { 
     progressBar1.Value = e.ProgressPercentage; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) { 
     backgroundWorker.RunWorkerAsync(); 
    } 
}