The Moth
Developer, Former MVP, now at Microsoft - Best of
2004
,
2005
,
2006
,
2007
,
2008
,
2009
« Blog link of the week 49
|
Home
|
.NET CF MVP Chat »
BackgroundWorker for CF 1.0
Mon, December 6, 2004, 10:50 AM under
MobileAndEmbedded
TIP: Download the class at the bottom of this post
.NET 2.0 makes threading easier by offering a
BackgroundWorker
class (not sure if CF 2.0 will have it, though). Read on to find out how to take advantage of it today in the CF 1.0 (also works on the desktop .NET 1.1).
The beauty (for someone not into documentation like me) of implementing a desktop class for the CF is that you don't need to document its usage (to an extent). There are already MSFT samples (and others) for the full Fx's class, so all you have to do is preserve the interface and behaviour.
So this is my summary of the
BackgroundWorker
story with hyperlinks to msdn.
In its simplest
:
1a. Create an instance of the class (
new BackgroundWorker()
)
2a. Hook up to its events (
DoWork
,
RunWorkerCompleted
)
3a. Tell it you want to do some background work (
RunWorkerAsync
)
4a. It raises the event. In your
DoWorkEventHandler
method do your background stuff (without touching GUI of course)
5a. When done, your
RunWorkerCompletedEventHandler
method will run on the GUI
Let's add value
[Pass state in, cancel from job]:
3b. Optionally pass an object to the worker method (
RunWorkerAsync
,
DoWorkEventArgs.Argument
)
4b. Optionally decide in your background work to cancel (
DoWorkEventArgs.Cancel
=true)
5b. In your RunWorkerCompletedEventHandler method, check whether the operation was cancelled (
RunWorkerCompletedEventArgs.Cancelled
)
It gets better
[Get a result back]:
4c. From your background work, optionally pass a result to the GUI when it's finished (
DoWorkEventArgs.Result
)
5c. Check for it (
RunWorkerCompletedEventArgs.Result
)
Wait, there is more!
[Progress notification]
2b. Additionally hook up to a progress event (
ProgressChanged
) if you configure the object to allow it (.
WorkerReportsProgress
)
4d. From your worker method, let the object know the percentage (
ReportProgress
) optionally passing some state (
ReportProgress
)
6. In your
ProgressChangedEventHandler
method that runs on the GUI, check the percentage (
ProgressChangedEventArgs.ProgressPercentage
) and optionally the state given (
ProgressChangedEventArgs.UserState
)
Finally
[Cancel from outside the job]
2c. Optionally Configure the object to allow cancellation (
WorkerSupportsCancellation
) other than just from the background worker method itself
4e. In your worker method check periodically if a cancel has been issued (
CancellationPending
) and if it has proceed as 4b
7. From any place in the code, ask the worker to cancel (
CancelAsync
)
If you have VS2005
just drag and drop it from the toolbox and start playing with it (on the desktop, not the CF). Browse its interface in object browser (it is under System.dll in the
System.ComponentModel
namespace)
Also read
:
How to:
Run an Operation in the Background
Walkthrough:
Implementing a Form That Uses a Background Operation
(Highly recommended)
Note that with my CF implementation you cannot drag the component on a form, but instead you have to manually create it from code (the assumption being you will do that from the GUI thread).
Download
the DLL
here
(works on all platforms/versions)
Get the VB source
here
Get the C# source at the next drop of the
SDF
UPDATE
: Also read this comprehensive
BackgroundWorker sample
Comments [0]
|
Permalink
Comments are closed.
About
My team's page on MSDN
Subscribe
Contact Form
My screencasts on channel9
Tags
AboutPresenting (5)
Blogging (7)
Career (5)
Communication (5)
dotNET (120)
Events (93)
GPGPU (2)
HPC (6)
IE7 RSS (6)
LINQ (23)
Links (129)
MobileAndEmbedded (148)
Orcas (128)
ParallelComputing (63)
Personal (32)
Random (42)
SideShow (12)
Silverlight (17)
SoftwareProcess (3)
UAC (14)
UserInterfaceDesign (5)
Vista (84)
VisualStudio (112)
Whidbey (31)
Windows (90)
WindowsServer2008 (3)
Latest Posts
Parallel Computing Platform Developer Lab
Slides and code for MPI Cluster Debugger
DirectCompute
GPGPU
Code for Parallelism Features Tour
Managed code and the Shell – Do?
Dev Lead Job opening on my team
Best of "The Moth" 2009
Bug Triage
Parallel Computing Features Tour in VS2010
MPI Cluster Debugger launch integration in VS2010
Parallel Debugging
"Parallel Programming Talk" show
Message Passing Interface (MPI)
Windows HPC Server links
Extension Manager in Visual Studio 2010
Core debugger enhancements in VS2010
Dump debugging with Parallel Stacks
Slides for Parallel Debugging windows
MPI Project Template for VS2010
Archives
March, 2010 (2)
February, 2010 (3)
January, 2010 (3)
December, 2009 (1)
November, 2009 (11)
October, 2009 (12)
September, 2009 (1)
August, 2009 (6)
July, 2009 (5)
June, 2009 (3)
May, 2009 (7)
April, 2009 (5)
March, 2009 (3)
February, 2009 (4)
January, 2009 (6)
December, 2008 (3)
November, 2008 (12)
October, 2008 (6)
September, 2008 (9)
August, 2008 (5)
July, 2008 (5)
June, 2008 (8)
May, 2008 (18)
April, 2008 (11)
March, 2008 (13)
February, 2008 (17)
January, 2008 (15)
December, 2007 (20)
November, 2007 (25)
October, 2007 (19)
September, 2007 (11)
August, 2007 (31)
July, 2007 (24)
June, 2007 (19)
May, 2007 (24)
April, 2007 (18)
March, 2007 (35)
February, 2007 (34)
January, 2007 (17)
December, 2006 (18)
November, 2006 (17)
October, 2006 (23)
September, 2006 (22)
August, 2006 (15)
July, 2006 (15)
June, 2006 (13)
May, 2006 (10)
April, 2006 (5)
March, 2006 (1)
February, 2006 (1)
January, 2006 (2)
December, 2005 (5)
November, 2005 (4)
October, 2005 (3)
September, 2005 (8)
August, 2005 (17)
July, 2005 (11)
June, 2005 (7)
May, 2005 (24)
April, 2005 (15)
March, 2005 (15)
February, 2005 (18)
January, 2005 (23)
December, 2004 (24)
November, 2004 (25)
October, 2004 (10)
September, 2004 (23)
August, 2004 (12)
July, 2004 (1)