2016-03-29 96 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(); 
    } 
}