The Moth
Developer, Former MVP, now at Microsoft - Best of
2004
,
2005
,
2006
,
2007
,
2008
,
2009
« SideShow Managed Components v1.0
|
Home
|
Silverlight 2 Beta 1 Namespaces – Part 4... »
BackgroundWorker
Tue, May 27, 2008, 08:36 PM under
dotNET
|
Silverlight
A cool class that was introduced in .NET Framework v2.0 is the
BackgroundWorker
. If you do any kind of UI development I encourage you to learn about this class (e.g. by following the links below), which makes it easy to execute long running operations on a separate thread, supporting cancellation, progress reporting and marshalling results back to the UI thread.
Back in 2004 I described what the class looks like (inc. links to MSDN) when I implemented it for the .NET Compact Framework v1.0/v2.0 (and for .NET Framework v1.1):
BackgroundWorker
. I also provided
sample code
to demonstrate the usage.
An added incentive to learn about it is that Silverlight 2 includes a fully interface-compatible version of
BackgroundWorker
. A good way to learn about it is by porting to Silverlight the desktop PI sample from my previous blog post and follow what the code does... have fun!
Comments [4]
|
Permalink
Tuesday, May 27, 2008 9:23:00 PM (Pacific Daylight Time, UTC-07:00)
Nice! The BackgroundWorker is one of my favorite classes, and I'm glad to see that it's made it into Silverlight.
I've been doing some interesting stuff with a typesafe wrapper for the BackgroundWorker that allows it to be used with anonymous types and anonymous delegates.
If anyone's interested, I posted a short demo over here.
http://thevalerios.net/matt/2008/05/a-type-safe-backgroundworker-wrapper/
It really cleans up the code into a nice, easy-to-read format by having an input argument, the code that gets executed on the background thread, and the code that gets executed on the UI thread when it's finished. It doesn't support progress or cancellation, but you could add that if you really needed it :)
mattman206
Wednesday, May 28, 2008 3:07:00 AM (Pacific Daylight Time, UTC-07:00)
problem I've always had with the BackgroundWorker is that if an exception occurs in the worker event and you don't capture that exception then you get no feedback at all on the exception, even if you have a global application exception handler.
Is there some easy way to catch exceptions that are thrown in a background worker, or do I just need to wrap the whole method in a try/catch?
Sam
Wednesday, May 28, 2008 3:55:00 AM (Pacific Daylight Time, UTC-07:00)
There's also a very clever alternative in the System.Threading.Timer class which can be used for simple operations where you want to go and run a timed operation on a separate thread.
Anonymous
Wednesday, June 11, 2008 4:02:00 AM (Pacific Daylight Time, UTC-07:00)
Here is some thoughts on how to enhance the BackgroundWorker capabilities for certain scenario not handled by default:
http://codebetter.com/blogs/patricksmacchia/archive/2008/06/10/backgroundworker-closure-and-overridable-task.aspx
Patrick
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)
Links (129)
LINQ (23)
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)