2016-03-29 15 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] }); 
} 

オブジェクトがListViewに追加されるたびに、FileLoadPBプログレスバーが 'i'ずつ増加します。これは機能しますが、実際にバーの進行を示すわけではありません。ループの開始時に空白を表示し、完全なものと最後のものだけを表示します。私はBackgroundWorkerでいくつかのことを読んだことがありますが、実装方法はわかりません。

+3

ループの実行中にUIスレッドがブロックされるという問題があります。 Backgroundworkerを使用することを検討してください – 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(); 
    } 
}