[英]Progress bar not refreshing in c#
I have a problem, I am using backgroundWorker1.RunWorkerAsync()
in on button_click method, and using backgroundWorker1_DoWork()
, backgroundWorker1_ProgressChanged()
events also, all events are triggering but progress bar is not refreshing. 我有一个问题,我使用
backgroundWorker1.RunWorkerAsync()
在button_click方法,以及使用backgroundWorker1_DoWork()
backgroundWorker1_ProgressChanged()
事件也,所有的事件触发,但进度条不清爽。 here is my code : 这是我的代码:
private void btnMove_Click(object sender, EventArgs e)
{
try
{
backgroundWorker1.RunWorkerAsync();
for (int i = 0; i < gdFiles.Rows.Count - 1; i++)
{
// my process
}
catch (Exception ex)
{
}
}
}
And events are 事件是
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
Thread.Sleep(100);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
progressBar1.Refresh();
}
Can any one please help on this..... 有人可以帮忙吗.....
Check the value of backgroundWorker1.WorkerReportsProgress
it should be set to true. 检查
backgroundWorker1.WorkerReportsProgress
的值,应将其设置为true。 Bellow working and tested example: 波纹管工作和测试示例:
public partial class Form1 : Form
{
private BackgroundWorker bw = new BackgroundWorker();
public Form1()
{
InitializeComponent();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
bw.ReportProgress(i);
Thread.Sleep(100);
}
}
private void button1_Click(object sender, EventArgs e)
{
bw.RunWorkerAsync();
}
}
I've tried to replicate your problem and it works fine on my end. 我已经尝试过复制您的问题,但最终效果良好。 Make sure backgroundWorker1.ReposrtsProgress is set to True .
确保backgroundWorker1.ReposrtsProgress设置为True 。 See code below:
参见下面的代码:
'private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
Thread.Sleep(100);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
progressBar1.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}`
Also, I think your "process" should be inside DoWork. 另外,我认为您的“过程”应该在DoWork内部。
Shouldn't you move your filemoving logic to the DoWork part? 您不应该将文件移动逻辑移到DoWork部分吗? The idea of a BackgroundWorker is to remove the heavy stuff from the UI-thread.
BackgroundWorker的想法是从UI线程中删除繁重的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.