添加进度条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上读过了,我只是不知道如何在这个案例中实现它。我贴了一个虚拟的例子。