473,378 Members | 1,122 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,378 software developers and data experts.

BackgroundWorker not really workigng for me

Hi,

I have a form with a progress bar on it and wanted to use the
BackgroundWorker to be able to update the progress. I looked at examples, run
some of them, but in debug, when the code gets to the do work method, it
stops for a long while and then executes the first line of the method and the
doesn't do anything else.

What am i doing wrong?
Mar 8 '07 #1
14 6333
I just had a look at the page you posted and it works fine, but if i put the
same code in a Windows form, it does.. hence my problem...
"Peter Bromberg [C# MVP]" wrote:
Here is an article with a very basic implementatio of all the features of the
BackgroundWorker class:

http://www.eggheadcafe.com/tutorials...ng-window.aspx

The progress event is not some "magic formula"; your long runnning process
actually must have some sort of mechanism to call the event at certain
intervals during the time the process is running.
Peter

--
Site: http://www.eggheadcafe.com
UnBlog: http://petesbloggerama.blogspot.com
Short urls & more: http://ittyurl.net


"Ishmael" wrote:
Hi,

I have a form with a progress bar on it and wanted to use the
BackgroundWorker to be able to update the progress. I looked at examples, run
some of them, but in debug, when the code gets to the do work method, it
stops for a long while and then executes the first line of the method and the
doesn't do anything else.

What am i doing wrong?
Mar 8 '07 #2
On Mar 8, 1:54 pm, Ishmael <Ishm...@discussions.microsoft.comwrote:
Hi,

I have a form with a progress bar on it and wanted to use the
BackgroundWorker to be able to update the progress. I looked at examples, run
some of them, but in debug, when the code gets to the do work method, it
stops for a long while and then executes the first line of the method and the
doesn't do anything else.

What am i doing wrong?
It sounds like you may be hitting an Exception in the DoWork method.
Exceptions in the DoWork are not thrown, they are stored in the Error
property of the RunWorkerCompletedEventArgs object, which you access
in the RunWorkCompleted method. Do you have a RunWorkCompleted method
and does it get executed?

Also, If you post some sample code of what you are doing, you'll
probably get better help.

Mar 8 '07 #3
Here is an article with a very basic implementatio of all the features of the
BackgroundWorker class:

http://www.eggheadcafe.com/tutorials...ng-window.aspx

The progress event is not some "magic formula"; your long runnning process
actually must have some sort of mechanism to call the event at certain
intervals during the time the process is running.
Peter

--
Site: http://www.eggheadcafe.com
UnBlog: http://petesbloggerama.blogspot.com
Short urls & more: http://ittyurl.net


"Ishmael" wrote:
Hi,

I have a form with a progress bar on it and wanted to use the
BackgroundWorker to be able to update the progress. I looked at examples, run
some of them, but in debug, when the code gets to the do work method, it
stops for a long while and then executes the first line of the method and the
doesn't do anything else.

What am i doing wrong?
Mar 8 '07 #4
On Mar 9, 1:24 am, Peter Bromberg [C# MVP]
<pbromb...@yahoo.yabbadabbadoo.comwrote:
Here is an article with a very basic implementatio of all the features of the
BackgroundWorker class:

http://www.eggheadcafe.com/tutorials...33-4308-9734-6...

The progress event is not some "magic formula"; your long runnning process
actually must have some sort of mechanism to call the event at certain
intervals during the time the process is running.
Peter

--
Site: http://www.eggheadcafe.com
UnBlog: http://petesbloggerama.blogspot.com
Short urls & more: http://ittyurl.net

"Ishmael" wrote:
Hi,
I have a form with a progress bar on it and wanted to use the
BackgroundWorker to be able to update the progress. I looked at examples, run
some of them, but in debug, when the code gets to the do work method, it
stops for a long while and then executes the first line of the method and the
doesn't do anything else.
What am i doing wrong?
Have you set the WorkerReportsProgress flag to true?

Mar 9 '07 #5
Right, Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace SmartBackup
{
public partial class FibonacciForm : Form
{
public FibonacciForm()
{
InitializeComponent();
}
int count = 0;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs
e)
{
// Do not access the form's BackgroundWorker reference directly.
// Instead, use the reference provided by the sender parameter.
BackgroundWorker bw = sender as BackgroundWorker;

// Extract the argument.
int arg = (int)e.Argument;

// Start the time-consuming operation.
e.Result = TimeConsumingOperation(bw, arg);

// If the operation was canceled by the user,
// set the DoWorkEventArgs.Cancel property to true.
if (bw.CancellationPending)
{
e.Cancel = true;
}
}

// This event handler demonstrates how to interpret
// the outcome of the asynchronous operation implemented
// in the DoWork event handler.
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
// The user canceled the operation.
MessageBox.Show("Operation was canceled");
}
else if (e.Error != null)
{
// There was an error during the operation.
string msg = String.Format("An error occurred: {0}",
e.Error.Message);
MessageBox.Show(msg);
}
else
{
// The operation completed normally.
string msg = String.Format("Result = {0}", e.Result);
MessageBox.Show(msg);
}
}

// This method models an operation that may take a long time
// to run. It can be cancelled, it can raise an exception,
// or it can exit normally and return a result. These outcomes
// are chosen randomly.
private int TimeConsumingOperation(
BackgroundWorker bw,
int sleepPeriod)
{
int result = 0;

Random rand = new Random();

while (!this.backgroundWorker1.CancellationPending)
{
bool exit = false;

switch (rand.Next(3))
{
// Raise an exception.
case 0:
{
throw new Exception("An error condition
occurred.");
break;
}

// Sleep for the number of milliseconds
// specified by the sleepPeriod parameter.
case 1:
{
bw.ReportProgress(count);
Thread.Sleep(sleepPeriod);
break;
}

// Exit and return normally.
case 2:
{
bw.ReportProgress(count);
result = 23;
exit = true;
break;
}

default:
{
break;
}
}

if (exit)
{
break;
}
}

return result;
}

private void startBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync(2000);
}

private void cancelBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
}

private void bw_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
count++;
}

}
}


#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.backgroundWorker1 = new
System.ComponentModel.BackgroundWorker();
this.startBtn = new System.Windows.Forms.Button();
this.cancelBtn = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.back groundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new
System.ComponentModel.RunWorkerCompletedEventHandl er(this.backgroundWorker1_RunWorkerCompleted);
this.backgroundWorker1.ProgressChanged += new
System.ComponentModel.ProgressChangedEventHandler( this.bw_ProgressChanged);
//
// startBtn
//
this.startBtn.Location = new System.Drawing.Point(12, 12);
this.startBtn.Name = "startBtn";
this.startBtn.Size = new System.Drawing.Size(75, 23);
this.startBtn.TabIndex = 0;
this.startBtn.Text = "Start";
this.startBtn.Click += new
System.EventHandler(this.startBtn_Click);
//
// cancelBtn
//
this.cancelBtn.Location = new System.Drawing.Point(94, 11);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(75, 23);
this.cancelBtn.TabIndex = 1;
this.cancelBtn.Text = "Cancel";
this.cancelBtn.Click += new
System.EventHandler(this.cancelBtn_Click);
//
// FibonacciForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(183, 49);
this.Controls.Add(this.cancelBtn);
this.Controls.Add(this.startBtn);
this.Name = "FibonacciForm";
this.Text = "Form1";
this.ResumeLayout(false);

}

#endregion

private System.ComponentModel.BackgroundWorker backgroundWorker1;
private System.Windows.Forms.Button startBtn;
private System.Windows.Forms.Button cancelBtn;

this was actually taken from an example, doesn't work with me. I'm sure i'm
doing something really stupid, just don't know what.

Mar 9 '07 #6
Your code looks exactly like the one in msdn:

http://msdn2.microsoft.com/en-us/library/hybbz6ke.aspx

Are you actually using VS2003/.Net 1.1 or VB2005/.Net2.0?

When you say it takes a long time to move after it hits the DoWork method,
how long are we talking about?

Robin S.
----------------------------------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:1D**********************************@microsof t.com...
Right, Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace SmartBackup
{
public partial class FibonacciForm : Form
{
public FibonacciForm()
{
InitializeComponent();
}
int count = 0;
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs
e)
{
// Do not access the form's BackgroundWorker reference
directly.
// Instead, use the reference provided by the sender
parameter.
BackgroundWorker bw = sender as BackgroundWorker;

// Extract the argument.
int arg = (int)e.Argument;

// Start the time-consuming operation.
e.Result = TimeConsumingOperation(bw, arg);

// If the operation was canceled by the user,
// set the DoWorkEventArgs.Cancel property to true.
if (bw.CancellationPending)
{
e.Cancel = true;
}
}

// This event handler demonstrates how to interpret
// the outcome of the asynchronous operation implemented
// in the DoWork event handler.
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
// The user canceled the operation.
MessageBox.Show("Operation was canceled");
}
else if (e.Error != null)
{
// There was an error during the operation.
string msg = String.Format("An error occurred: {0}",
e.Error.Message);
MessageBox.Show(msg);
}
else
{
// The operation completed normally.
string msg = String.Format("Result = {0}", e.Result);
MessageBox.Show(msg);
}
}

// This method models an operation that may take a long time
// to run. It can be cancelled, it can raise an exception,
// or it can exit normally and return a result. These outcomes
// are chosen randomly.
private int TimeConsumingOperation(
BackgroundWorker bw,
int sleepPeriod)
{
int result = 0;

Random rand = new Random();

while (!this.backgroundWorker1.CancellationPending)
{
bool exit = false;

switch (rand.Next(3))
{
// Raise an exception.
case 0:
{
throw new Exception("An error condition
occurred.");
break;
}

// Sleep for the number of milliseconds
// specified by the sleepPeriod parameter.
case 1:
{
bw.ReportProgress(count);
Thread.Sleep(sleepPeriod);
break;
}

// Exit and return normally.
case 2:
{
bw.ReportProgress(count);
result = 23;
exit = true;
break;
}

default:
{
break;
}
}

if (exit)
{
break;
}
}

return result;
}

private void startBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync(2000);
}

private void cancelBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
}

private void bw_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
count++;
}

}
}


#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.backgroundWorker1 = new
System.ComponentModel.BackgroundWorker();
this.startBtn = new System.Windows.Forms.Button();
this.cancelBtn = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.back groundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new
System.ComponentModel.RunWorkerCompletedEventHandl er(this.backgroundWorker1_RunWorkerCompleted);
this.backgroundWorker1.ProgressChanged += new
System.ComponentModel.ProgressChangedEventHandler( this.bw_ProgressChanged);
//
// startBtn
//
this.startBtn.Location = new System.Drawing.Point(12, 12);
this.startBtn.Name = "startBtn";
this.startBtn.Size = new System.Drawing.Size(75, 23);
this.startBtn.TabIndex = 0;
this.startBtn.Text = "Start";
this.startBtn.Click += new
System.EventHandler(this.startBtn_Click);
//
// cancelBtn
//
this.cancelBtn.Location = new System.Drawing.Point(94, 11);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(75, 23);
this.cancelBtn.TabIndex = 1;
this.cancelBtn.Text = "Cancel";
this.cancelBtn.Click += new
System.EventHandler(this.cancelBtn_Click);
//
// FibonacciForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(183, 49);
this.Controls.Add(this.cancelBtn);
this.Controls.Add(this.startBtn);
this.Name = "FibonacciForm";
this.Text = "Form1";
this.ResumeLayout(false);

}

#endregion

private System.ComponentModel.BackgroundWorker backgroundWorker1;
private System.Windows.Forms.Button startBtn;
private System.Windows.Forms.Button cancelBtn;

this was actually taken from an example, doesn't work with me. I'm sure
i'm
doing something really stupid, just don't know what.
Mar 11 '07 #7
It does, because it is!
i did my own code based on that, but when mine didn't work, i decided to
actually
test the original code.
I am using VS2005/net 2.0 and also 3.0 installed (not that it should matter)

i'm talking something like 20 seconds. Enters the dowork code, executes the
first line and then the debugger doesn't see it anymore nor does the rest of
the code get executed, neither does it enter the work completed with any
error message. again, most likely this is my mistake, but i can't pin point
where it is.

"RobinS" wrote:
Your code looks exactly like the one in msdn:

http://msdn2.microsoft.com/en-us/library/hybbz6ke.aspx

Are you actually using VS2003/.Net 1.1 or VB2005/.Net2.0?

When you say it takes a long time to move after it hits the DoWork method,
how long are we talking about?

Robin S.
----------------------------------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:1D**********************************@microsof t.com...
Right, Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace SmartBackup
{
public partial class FibonacciForm : Form
{
public FibonacciForm()
{
InitializeComponent();
}
int count = 0;
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs
e)
{
// Do not access the form's BackgroundWorker reference
directly.
// Instead, use the reference provided by the sender
parameter.
BackgroundWorker bw = sender as BackgroundWorker;

// Extract the argument.
int arg = (int)e.Argument;

// Start the time-consuming operation.
e.Result = TimeConsumingOperation(bw, arg);

// If the operation was canceled by the user,
// set the DoWorkEventArgs.Cancel property to true.
if (bw.CancellationPending)
{
e.Cancel = true;
}
}

// This event handler demonstrates how to interpret
// the outcome of the asynchronous operation implemented
// in the DoWork event handler.
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
// The user canceled the operation.
MessageBox.Show("Operation was canceled");
}
else if (e.Error != null)
{
// There was an error during the operation.
string msg = String.Format("An error occurred: {0}",
e.Error.Message);
MessageBox.Show(msg);
}
else
{
// The operation completed normally.
string msg = String.Format("Result = {0}", e.Result);
MessageBox.Show(msg);
}
}

// This method models an operation that may take a long time
// to run. It can be cancelled, it can raise an exception,
// or it can exit normally and return a result. These outcomes
// are chosen randomly.
private int TimeConsumingOperation(
BackgroundWorker bw,
int sleepPeriod)
{
int result = 0;

Random rand = new Random();

while (!this.backgroundWorker1.CancellationPending)
{
bool exit = false;

switch (rand.Next(3))
{
// Raise an exception.
case 0:
{
throw new Exception("An error condition
occurred.");
break;
}

// Sleep for the number of milliseconds
// specified by the sleepPeriod parameter.
case 1:
{
bw.ReportProgress(count);
Thread.Sleep(sleepPeriod);
break;
}

// Exit and return normally.
case 2:
{
bw.ReportProgress(count);
result = 23;
exit = true;
break;
}

default:
{
break;
}
}

if (exit)
{
break;
}
}

return result;
}

private void startBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync(2000);
}

private void cancelBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
}

private void bw_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
count++;
}

}
}


#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.backgroundWorker1 = new
System.ComponentModel.BackgroundWorker();
this.startBtn = new System.Windows.Forms.Button();
this.cancelBtn = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.back groundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new
System.ComponentModel.RunWorkerCompletedEventHandl er(this.backgroundWorker1_RunWorkerCompleted);
this.backgroundWorker1.ProgressChanged += new
System.ComponentModel.ProgressChangedEventHandler( this.bw_ProgressChanged);
//
// startBtn
//
this.startBtn.Location = new System.Drawing.Point(12, 12);
this.startBtn.Name = "startBtn";
this.startBtn.Size = new System.Drawing.Size(75, 23);
this.startBtn.TabIndex = 0;
this.startBtn.Text = "Start";
this.startBtn.Click += new
System.EventHandler(this.startBtn_Click);
//
// cancelBtn
//
this.cancelBtn.Location = new System.Drawing.Point(94, 11);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(75, 23);
this.cancelBtn.TabIndex = 1;
this.cancelBtn.Text = "Cancel";
this.cancelBtn.Click += new
System.EventHandler(this.cancelBtn_Click);
//
// FibonacciForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(183, 49);
this.Controls.Add(this.cancelBtn);
this.Controls.Add(this.startBtn);
this.Name = "FibonacciForm";
this.Text = "Form1";
this.ResumeLayout(false);

}

#endregion

private System.ComponentModel.BackgroundWorker backgroundWorker1;
private System.Windows.Forms.Button startBtn;
private System.Windows.Forms.Button cancelBtn;

this was actually taken from an example, doesn't work with me. I'm sure
i'm
doing something really stupid, just don't know what.

Mar 11 '07 #8
Have you tried putting in a breakpoint? I have a case where I'm using the
Background Worker to show a progress bar for a method I'm running in one of
my business layer classes. I *can* put a breakpoint in there at the top of
the method, and VS will break there even though it's in a different thread.
Can you try that?

Also, mine does take a few seconds to start, enough that when I went back
and looked at it, I found I had put debug.print statement for the current
time in there to see how long it was taking. Try this also, and see how
long it really is.

And try doing something *besides* sleeping. This example, in .Net 2.0,
calculates Fibonacci numbers. This is the example I used to get mine to
work.

http://msdn2.microsoft.com/en-us/lib...undworker.aspx

Sleep goes to sleep and nothing happens while it's sleeping, so that could
be confusing you.

Hope this helps.
Robin S.
-----------------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:99**********************************@microsof t.com...
It does, because it is!
i did my own code based on that, but when mine didn't work, i decided to
actually
test the original code.
I am using VS2005/net 2.0 and also 3.0 installed (not that it should
matter)

i'm talking something like 20 seconds. Enters the dowork code, executes
the
first line and then the debugger doesn't see it anymore nor does the rest
of
the code get executed, neither does it enter the work completed with any
error message. again, most likely this is my mistake, but i can't pin
point
where it is.

"RobinS" wrote:
>Your code looks exactly like the one in msdn:

http://msdn2.microsoft.com/en-us/library/hybbz6ke.aspx

Are you actually using VS2003/.Net 1.1 or VB2005/.Net2.0?

When you say it takes a long time to move after it hits the DoWork
method,
how long are we talking about?

Robin S.
----------------------------------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:1D**********************************@microso ft.com...
Right, Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace SmartBackup
{
public partial class FibonacciForm : Form
{
public FibonacciForm()
{
InitializeComponent();
}
int count = 0;
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs
e)
{
// Do not access the form's BackgroundWorker reference
directly.
// Instead, use the reference provided by the sender
parameter.
BackgroundWorker bw = sender as BackgroundWorker;

// Extract the argument.
int arg = (int)e.Argument;

// Start the time-consuming operation.
e.Result = TimeConsumingOperation(bw, arg);

// If the operation was canceled by the user,
// set the DoWorkEventArgs.Cancel property to true.
if (bw.CancellationPending)
{
e.Cancel = true;
}
}

// This event handler demonstrates how to interpret
// the outcome of the asynchronous operation implemented
// in the DoWork event handler.
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
// The user canceled the operation.
MessageBox.Show("Operation was canceled");
}
else if (e.Error != null)
{
// There was an error during the operation.
string msg = String.Format("An error occurred: {0}",
e.Error.Message);
MessageBox.Show(msg);
}
else
{
// The operation completed normally.
string msg = String.Format("Result = {0}", e.Result);
MessageBox.Show(msg);
}
}

// This method models an operation that may take a long time
// to run. It can be cancelled, it can raise an exception,
// or it can exit normally and return a result. These outcomes
// are chosen randomly.
private int TimeConsumingOperation(
BackgroundWorker bw,
int sleepPeriod)
{
int result = 0;

Random rand = new Random();

while (!this.backgroundWorker1.CancellationPending)
{
bool exit = false;

switch (rand.Next(3))
{
// Raise an exception.
case 0:
{
throw new Exception("An error condition
occurred.");
break;
}

// Sleep for the number of milliseconds
// specified by the sleepPeriod parameter.
case 1:
{
bw.ReportProgress(count);
Thread.Sleep(sleepPeriod);
break;
}

// Exit and return normally.
case 2:
{
bw.ReportProgress(count);
result = 23;
exit = true;
break;
}

default:
{
break;
}
}

if (exit)
{
break;
}
}

return result;
}

private void startBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync(2000);
}

private void cancelBtn_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
}

private void bw_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
count++;
}

}
}


#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.backgroundWorker1 = new
System.ComponentModel.BackgroundWorker();
this.startBtn = new System.Windows.Forms.Button();
this.cancelBtn = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.back groundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new
System.ComponentModel.RunWorkerCompletedEventHandl er(this.backgroundWorker1_RunWorkerCompleted);
this.backgroundWorker1.ProgressChanged += new
System.ComponentModel.ProgressChangedEventHandler( this.bw_ProgressChanged);
//
// startBtn
//
this.startBtn.Location = new System.Drawing.Point(12, 12);
this.startBtn.Name = "startBtn";
this.startBtn.Size = new System.Drawing.Size(75, 23);
this.startBtn.TabIndex = 0;
this.startBtn.Text = "Start";
this.startBtn.Click += new
System.EventHandler(this.startBtn_Click);
//
// cancelBtn
//
this.cancelBtn.Location = new System.Drawing.Point(94, 11);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(75, 23);
this.cancelBtn.TabIndex = 1;
this.cancelBtn.Text = "Cancel";
this.cancelBtn.Click += new
System.EventHandler(this.cancelBtn_Click);
//
// FibonacciForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F,
13F);
this.AutoScaleMode =
System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(183, 49);
this.Controls.Add(this.cancelBtn);
this.Controls.Add(this.startBtn);
this.Name = "FibonacciForm";
this.Text = "Form1";
this.ResumeLayout(false);

}

#endregion

private System.ComponentModel.BackgroundWorker
backgroundWorker1;
private System.Windows.Forms.Button startBtn;
private System.Windows.Forms.Button cancelBtn;

this was actually taken from an example, doesn't work with me. I'm
sure
i'm
doing something really stupid, just don't know what.


Mar 12 '07 #9
I still can't get it to work. here is my code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace SmartBackup
{
public partial class FibonacciForm : Form
{
private int numberToCompute = 0;
private int highestPercentageReached = 0;

private System.Windows.Forms.NumericUpDown numericUpDown1;
private System.Windows.Forms.Button startAsyncButton;
private System.Windows.Forms.Button cancelAsyncButton;
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Label resultLabel;
private System.ComponentModel.BackgroundWorker backgroundWorker1;

public FibonacciForm()
{
InitializeComponent();
InitializeBackgoundWorker();
}
// Set up the BackgroundWorker object by
// attaching event handlers.
private void InitializeBackgoundWorker()
{
backgroundWorker1.DoWork +=
new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(
backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.ProgressChanged +=
new ProgressChangedEventHandler(
backgroundWorker1_ProgressChanged);
}

private void startAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Reset the text in the result label.
resultLabel.Text = String.Empty;

// Disable the UpDown control until
// the asynchronous operation is done.
this.numericUpDown1.Enabled = false;

// Disable the Start button until
// the asynchronous operation is done.
this.startAsyncButton.Enabled = false;

// Enable the Cancel button while
// the asynchronous operation runs.
this.cancelAsyncButton.Enabled = true;

// Get the value from the UpDown control.
numberToCompute = (int)numericUpDown1.Value;

// Reset the variable for percentage tracking.
highestPercentageReached = 0;

// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync(numberToCompute);
}

private void cancelAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Cancel the asynchronous operation.
this.backgroundWorker1.CancelAsync();

// Disable the Cancel button.
cancelAsyncButton.Enabled = false;
}

// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
// Get the BackgroundWorker that raised this event.
BackgroundWorker worker = sender as BackgroundWorker;

// Assign the result of the computation
// to the Result property of the DoWorkEventArgs
// object. This is will be available to the
// RunWorkerCompleted eventhandler.
e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}

// This event handler deals with the results of the
// background operation.
private void backgroundWorker1_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
// First, handle the case where an exception was thrown.
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
// Next, handle the case where the user canceled
// the operation.
// Note that due to a race condition in
// the DoWork event handler, the Cancelled
// flag may not have been set, even though
// CancelAsync was called.
resultLabel.Text = "Canceled";
}
else
{
// Finally, handle the case where the operation
// succeeded.
resultLabel.Text = e.Result.ToString();
}

// Enable the UpDown control.
this.numericUpDown1.Enabled = true;

// Enable the Start button.
startAsyncButton.Enabled = true;

// Disable the Cancel button.
cancelAsyncButton.Enabled = false;
}

// This event handler updates the progress bar.
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}

// This is the method that does the actual work. For this
// example, it computes a Fibonacci number and
// reports progress as it does its work.
long ComputeFibonacci(int n, BackgroundWorker worker,
DoWorkEventArgs e)
{
// The parameter n must be >= 0 and <= 91.
// Fib(n), with n 91, overflows a long.
if ((n < 0) || (n 91))
{
throw new ArgumentException(
"value must be >= 0 and <= 91", "n");
}

long result = 0;

// Abort the operation if the user has canceled.
// Note that a call to CancelAsync may have set
// CancellationPending to true just after the
// last invocation of this method exits, so this
// code will not have the opportunity to set the
// DoWorkEventArgs.Cancel flag to true. This means
// that RunWorkerCompletedEventArgs.Cancelled will
// not be set to true in your RunWorkerCompleted
// event handler. This is a race condition.

if (worker.CancellationPending)
{
e.Cancel = true;
}
else
{
if (n < 2)
{
result = 1;
}
else
{
result = ComputeFibonacci(n - 1, worker, e) +
ComputeFibonacci(n - 2, worker, e);
}

// Report progress as a percentage of the total task.
int percentComplete =
(int)((float)n / (float)numberToCompute * 100);
if (percentComplete highestPercentageReached)
{
highestPercentageReached = percentComplete;
worker.ReportProgress(percentComplete);
}
}

return result;
}
}
}

namespace SmartBackup
{
partial class FibonacciForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be
disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
this.startAsyncButton = new System.Windows.Forms.Button();
this.cancelAsyncButton = new System.Windows.Forms.Button();
this.resultLabel = new System.Windows.Forms.Label();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.backgroundWorker1 = new
System.ComponentModel.BackgroundWorker();

((System.ComponentModel.ISupportInitialize)(this.n umericUpDown1)).BeginInit();
this.SuspendLayout();
//
// numericUpDown1
//
this.numericUpDown1.Location = new System.Drawing.Point(16, 16);
this.numericUpDown1.Maximum = new decimal(new int[] {
91,
0,
0,
0});
this.numericUpDown1.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.numericUpDown1.Name = "numericUpDown1";
this.numericUpDown1.Size = new System.Drawing.Size(80, 20);
this.numericUpDown1.TabIndex = 0;
this.numericUpDown1.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// startAsyncButton
//
this.startAsyncButton.Location = new System.Drawing.Point(16, 72);
this.startAsyncButton.Name = "startAsyncButton";
this.startAsyncButton.Size = new System.Drawing.Size(120, 23);
this.startAsyncButton.TabIndex = 1;
this.startAsyncButton.Text = "Start Async";
this.startAsyncButton.Click += new
System.EventHandler(this.startAsyncButton_Click);
//
// cancelAsyncButton
//
this.cancelAsyncButton.Enabled = false;
this.cancelAsyncButton.Location = new System.Drawing.Point(153,
72);
this.cancelAsyncButton.Name = "cancelAsyncButton";
this.cancelAsyncButton.Size = new System.Drawing.Size(119, 23);
this.cancelAsyncButton.TabIndex = 2;
this.cancelAsyncButton.Text = "Cancel Async";
this.cancelAsyncButton.Click += new
System.EventHandler(this.cancelAsyncButton_Click);
//
// resultLabel
//
this.resultLabel.BorderStyle =
System.Windows.Forms.BorderStyle.Fixed3D;
this.resultLabel.Location = new System.Drawing.Point(112, 16);
this.resultLabel.Name = "resultLabel";
this.resultLabel.Size = new System.Drawing.Size(160, 23);
this.resultLabel.TabIndex = 3;
this.resultLabel.Text = "(no result)";
this.resultLabel.TextAlign =
System.Drawing.ContentAlignment.MiddleCenter;
//
// progressBar1
//
this.progressBar1.Location = new System.Drawing.Point(18, 48);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(256, 8);
this.progressBar1.Step = 2;
this.progressBar1.TabIndex = 4;
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.back groundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new
System.ComponentModel.RunWorkerCompletedEventHandl er(this.backgroundWorker1_RunWorkerCompleted);
this.backgroundWorker1.ProgressChanged += new
System.ComponentModel.ProgressChangedEventHandler( this.backgroundWorker1_ProgressChanged);
//
// FibonacciForm
//
this.ClientSize = new System.Drawing.Size(292, 118);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.resultLabel);
this.Controls.Add(this.cancelAsyncButton);
this.Controls.Add(this.startAsyncButton);
this.Controls.Add(this.numericUpDown1);
this.Name = "FibonacciForm";
this.Text = "Fibonacci Calculator";

((System.ComponentModel.ISupportInitialize)(this.n umericUpDown1)).EndInit();
this.ResumeLayout(false);

}

#endregion
}
}
Mar 14 '07 #10
I had this and didn't work. commented the first two lines and it works, why?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new FibonacciForm());
}
Mar 14 '07 #11
Did you ever figure this out?

Robin S.
---------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:8C**********************************@microsof t.com...
>I had this and didn't work. commented the first two lines and it works,
why?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new FibonacciForm());
}

Mar 23 '07 #12
Nope, but without it it works great. i have to analyze which one of the lines
is actually breaking it. i'll try and do it this weekend and i'll post back

"RobinS" wrote:
Did you ever figure this out?

Robin S.
---------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:8C**********************************@microsof t.com...
I had this and didn't work. commented the first two lines and it works,
why?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new FibonacciForm());
}


Mar 24 '07 #13
Okay. Robin S.
------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:C5**********************************@microsof t.com...
Nope, but without it it works great. i have to analyze which one of the
lines
is actually breaking it. i'll try and do it this weekend and i'll post
back

"RobinS" wrote:
>Did you ever figure this out?

Robin S.
---------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:8C**********************************@microso ft.com...
>I had this and didn't work. commented the first two lines and it works,
why?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new FibonacciForm());
}



Mar 24 '07 #14
it's the enablevisualstyles that brakes the app, just don't know why. it's a
mistery to me

"RobinS" wrote:
Okay. Robin S.
------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:C5**********************************@microsof t.com...
Nope, but without it it works great. i have to analyze which one of the
lines
is actually breaking it. i'll try and do it this weekend and i'll post
back

"RobinS" wrote:
Did you ever figure this out?

Robin S.
---------------------------------
"Ishmael" <Is*****@discussions.microsoft.comwrote in message
news:8C**********************************@microsof t.com...
I had this and didn't work. commented the first two lines and it works,
why?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new FibonacciForm());
}


Mar 28 '07 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Nicolas Zenou | last post by:
Hey everyone, I am new to .NET Framework programing and I have an important question. In fact, I need to launch many thread in my application. I assume to use backgroundWorker which are really...
5
by: Rob R. Ainscough | last post by:
I'm using a BackgroundWorker to perform a file download from an ftp site. Per good code design practices where I separate my UI code from my core logic code (in this case my Download file method in...
5
by: Michael M. | last post by:
I have the following code (listed at bottom of post) that pings a small range of IP address to see which ones are alive. To speed things up a little I am trying to use more than one thread,...
8
by: =?Utf-8?B?cmFuZHkxMjAw?= | last post by:
I have an application with several BackgroundWorker threads. I hoped I'd be able to just type backgroundworker1.Name = "bw1"; but I don't see a name property. Any thoughts on how to name a...
9
by: RvGrah | last post by:
I'm completely new to using background threading, though I have downloaded and run through several samples and understood how they worked. My question is: I have an app whose primary form...
3
by: Rotsey | last post by:
Hi, Anyone able to look at this code with backgroundworker. I am calling a FindDuplicates class and need to pass in the DriveData class that is passed into the form. So it is necessary to...
2
by: Marcel Overweel | last post by:
Hello, I am using a BackgroundWorker as a base class for several workers in a windows service application. Because BackgroundWorker is derived from Component, Visual Studio (2008) shows the...
1
by: =?Utf-8?B?QWxoYW1icmEgRWlkb3MgS2lxdWVuZXQ=?= | last post by:
Hi misters, Is it possible "kill" the thread of Backgroundworker ? In my Dowork event, I have NOT While for do e.Cancel = true, only have a call to external COM. If I want cancel, calling...
1
by: schnandr | last post by:
Hi, I have a user control which contains ListView. I copy all ListViewItems into a separate List<ListViewItemcalled unfilteredItems. I am using a BackgroundWorker to filter the ListView. When...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.