Hi,
i have a form that contains a class with a toolstripprogressbar.
I click the button and it calls the second class. It runs a simple loop (for now). While this is running, its supposed to update the progressbar on the form - BUT it never seems to update the progressbar.
Any ideas? Thanks in advance
private void
btnSave_Click(object sender, EventArgs e)
{
/*TODO needs
ammending*/
ucClient test = (ucClient)tabInstance[tbctrlMain.SelectedIndex - 1];
bgWork.WorkerReportsProgress = true;
bgWork.DoWork += test.saveState;
bgWork.RunWorkerCompleted += workerCompleted;
bgWork.RunWorkerAsync();
}
public void
ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.pbWork.Value = e.ProgressPercentage;
pbWork.Control.Invoke(new MethodInvoker(delegate(){pbWork.Value = e.ProgressPercentage;}));
}
private void
workerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("done");
} |
public void saveState(object sender, DoWorkEventArgs e)
{
BackgroundWorker saveWork = sender
as BackgroundWorker;
int totalSteps = 5;
for (int i = 1; i <= totalSteps;
i++)
{
saveWork.ReportProgress(i * 100 / totalSteps);
}
// blClient
client = new blClient();
//
client.createClient(Forename,Surname, Road, Area, City, County,Postcode,
Telephone, Email);
}
|
Sam HobbsPosted Aug 28, 2010, 5:06 AM
sniperedPosted Aug 27, 2010, 5:41 AM
Do you notice why it's never called?
Form:
private void btnSave_Click(object sender, EventArgs e)
{
BackgroundWorker bgWork = new BackgroundWorker();
/*TODO needs ammending*/
ucClient test = (ucClient)tabInstance[tbctrlMain.SelectedIndex - 1];
bgWork.WorkerReportsProgress = true;
bgWork.DoWork += test.saveState;
bgWork.RunWorkerCompleted += workerCompleted;
bgWork.RunWorkerAsync();
}
public void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//pbWork.Control.BeginInvoke((MethodInvoker)delegate { pbWork.Value = e.ProgressPercentage; });
//pbWork.Value = e.ProgressPercentage;
MessageBox.Show( "The current value is " + e.ProgressPercentage);
}
UserControl:
public void saveState(object sender, DoWorkEventArgs e)
{
BackgroundWorker saveWork = sender as BackgroundWorker;
int totalSteps = 5;
for (int i = 1; i <= totalSteps; i++)
{
saveWork.ReportProgress(i * 100 / totalSteps);
Thread.Sleep(1000);
}
// blClient client = new blClient();
// client.createClient(Forename,Surname, Road, Area, City, County,Postcode, Telephone, Email);
}
Mike GoldPosted Aug 26, 2010, 9:52 PM
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
namespace ComboBoxUpperCase
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
bgWorker.DoWork += BgWorkerDoWork;
bgWorker.RunWorkerAsync();
}
void BgWorkerDoWork(object sender, DoWorkEventArgs e)
{
// do some long process
for (int i = 0; i < 5; i ++)
{
Thread.Sleep(1000);
// increment progress bar
progressBar1.BeginInvoke((MethodInvoker) delegate { progressBar1.Value += 20; });
}
}
}
}