添加进度条C#WPF

添加进度条C#WPF,c#,wpf,progress-bar,C#,Wpf,Progress Bar,我正在尝试将进度条添加到我的程序中 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.value

我正在尝试将进度条添加到我的程序中

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.max=mainClass.values.realXPos.Count;
对于(int i=0;i

我希望每次将对象添加到我的ListView时,FileLoadPB进度条都以“I”递增。这是可行的,但是它实际上并没有显示条形图的进度。它只在循环开始时显示为空,在循环结束时显示为满。我已经阅读了一些关于BackgroundWorker的内容,但是我不确定如何实现它。

下面的代码只是一个虚拟代码,用于说明如何使用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();
    }
}
公共部分类主窗口:窗口{
BackgroundWorker BackgroundWorker=新的BackgroundWorker();
List listDummy=新列表();
公共主窗口(){
初始化组件();
backgroundWorker.WorkerReportsProgress=true;
backgroundWorker.ProgressChanged+=backgroundWorker\u ProgressChanged;
backgroundWorker.DoWork+=backgroundWorker\u DoWork;
}
无效backgroundWorker_DoWork(对象发送方,DoWorkEventArgs e){
变量numberOfItems=111;
对于(int i=0;i
下面的代码只是演示如何使用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();
    }
}
公共部分类主窗口:窗口{
BackgroundWorker BackgroundWorker=新的BackgroundWorker();
List listDummy=新列表();
公共主窗口(){
初始化组件();
backgroundWorker.WorkerReportsProgress=true;
backgroundWorker.ProgressChanged+=backgroundWorker\u ProgressChanged;
backgroundWorker.DoWork+=backgroundWorker\u DoWork;
}
无效backgroundWorker_DoWork(对象发送方,DoWorkEventArgs e){
变量numberOfItems=111;
对于(int i=0;i
您的问题是,UI线程在循环执行期间被阻塞。考虑使用BurnWorkWorkLi,我已经在BuffWorkWork上读过了,我只是不知道如何在这个案例中实现它。我发布了一个虚拟示例。您的问题是,UI线程在循环执行期间被阻塞。考虑使用BurnWorkWorkLi,我已经在BuffWorkWork上读过了,我只是不知道如何在这个案例中实现它。我贴了一个虚拟的例子。