无法使用代码获取进度条动画,progresschanged 未调用
cannot get progressbar animation with code, progresschanged not called
我正在尝试执行此处的代码
http://www.dotnetperls.com/progressbar
这是我的代码。我画了一个背景工作者,并以编程方式添加了一个进度条。
我试过跨过代码,我试过使用消息框来查看发生了什么,看起来它只执行了 for 循环的一次迭代,当 i=0 时,似乎从那开始,到完成过程,并且 Progress 过程永远不会被调用。
并且进度条从 0 开始永远不会改变值。
当我想让它进步到 100 时。
我确实尝试在 program.cs 中注释掉这一行 //Application.EnableVisualStyles();
以删除进度栏具有的自然动画,但无论哪种方式,注释或未注释,jt 甚至都没有 运行 for 循环的每次迭代,它在 i=0 之后退出。后台工作人员或进度条没有任何进展。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace backgroundworker2
{
public partial class Form1 : Form
{
ProgressBar progressBar1 = new ProgressBar();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// progressBar1.BackColor = Color.Red;
this.Controls.Add(progressBar1);
//progressBar1.Value = 100;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// textBox1.Text = "0";
for (int i = 0; i < 100; i++)
{
// MessageBox.Show("a"+i);
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("done");
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// textBox1.Text = Convert.ToString( e.ProgressPercentage);
progressBar1.Value = e.ProgressPercentage;
// MessageBox.Show("asdf");
}
}
}
在 Form1_Load
中,您 运行 BackgroundWorker
但您尚未将其 WorkerReportsProgress
属性 设置为 true
。默认值为 false
。所以你需要在调用RunWorkerAsync()
方法之前添加这一行:
backgroundWorker1.WorkerReportsProgress = true;
我正在尝试执行此处的代码
http://www.dotnetperls.com/progressbar
这是我的代码。我画了一个背景工作者,并以编程方式添加了一个进度条。
我试过跨过代码,我试过使用消息框来查看发生了什么,看起来它只执行了 for 循环的一次迭代,当 i=0 时,似乎从那开始,到完成过程,并且 Progress 过程永远不会被调用。
并且进度条从 0 开始永远不会改变值。
当我想让它进步到 100 时。
我确实尝试在 program.cs 中注释掉这一行 //Application.EnableVisualStyles();
以删除进度栏具有的自然动画,但无论哪种方式,注释或未注释,jt 甚至都没有 运行 for 循环的每次迭代,它在 i=0 之后退出。后台工作人员或进度条没有任何进展。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace backgroundworker2
{
public partial class Form1 : Form
{
ProgressBar progressBar1 = new ProgressBar();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// progressBar1.BackColor = Color.Red;
this.Controls.Add(progressBar1);
//progressBar1.Value = 100;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// textBox1.Text = "0";
for (int i = 0; i < 100; i++)
{
// MessageBox.Show("a"+i);
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("done");
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// textBox1.Text = Convert.ToString( e.ProgressPercentage);
progressBar1.Value = e.ProgressPercentage;
// MessageBox.Show("asdf");
}
}
}
在 Form1_Load
中,您 运行 BackgroundWorker
但您尚未将其 WorkerReportsProgress
属性 设置为 true
。默认值为 false
。所以你需要在调用RunWorkerAsync()
方法之前添加这一行:
backgroundWorker1.WorkerReportsProgress = true;