473,387 Members | 3,810 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,387 software developers and data experts.

"Outsourcing" Background worker creation

36
I am trying to code a simple background workers class without needing to use the backgroundworker object on a form. This would allow me to use a background worker in any class without writing much additional code. Is it possible to pass in the name of a sub at runtime instead of hard-coding it? To do this I would replace onDoWork and onProgressChanged below and use (Byval onWorkSub as SomeKindOfObject?, Byval onProgressChangedSub as SomeKindOfObject?) instead.

Expand|Select|Wrap|Line Numbers
  1.         ' Instantiate the worker
  2.         Dim worker As New BackgroundWorker ' Initialize the worker
  3.         worker.WorkerReportsProgress = True
  4.         worker.WorkerSupportsCancellation = True
  5.         AddHandler worker.DoWork, New DoWorkEventHandler(AddressOf onDoWork) ' Create delegate handle
  6.         AddHandler worker.ProgressChanged, New ProgressChangedEventHandler(AddressOf onProgressChanged) ' Create callback handle
  7.  
  8.         '* start the worker
  9.         worker.RunWorkerAsync()
Jun 10 '09 #1
1 2006
Infog
36
Is there a way to do this without having as much code? ie, a "proper" way of doing this?

No guarantees if this will do what you want it to. :)

Expand|Select|Wrap|Line Numbers
  1. ''' <summary>Allows tieing events to a worker without additional code</summary>
  2.     Public Class BackgroundWorkerCreation
  3.         Private _worker As BackgroundWorker
  4.  
  5.         ''' <summary>Initialize the worker and tie on events</summary>
  6.         ''' <param name="subDoWork">New DoWorkEventHandler(AddressOf onDoWork)</param>
  7.         ''' <param name="subProgressChanged">New ProgressChangedEventHandler(AddressOf onProgressChanged)</param>
  8.         ''' <param name="subWorkerCompleted">New RunWorkerCompletedEventHandler(AddressOf onWorkerCompleted)</param>
  9.         ''' <param name="SupportCancelation"></param>
  10.         ''' <param name="StartWorkerNow">"False" to start the worker at a later time</param>
  11.         Public Sub CreateWorker(ByVal subDoWork As DoWorkEventHandler, Optional ByVal subProgressChanged As ProgressChangedEventHandler = Nothing, _
  12.                                                                                  Optional ByVal subWorkerCompleted As RunWorkerCompletedEventHandler = Nothing, _
  13.                                                                                  Optional ByVal SupportCancelation As Boolean = False, _
  14.                                                                                  Optional ByVal StartWorkerNow As Boolean = True)
  15.  
  16.             '* To use the background worker, you'll need to type in the arguments similar to what is shown:
  17.  
  18.             'New DoWorkEventHandler(AddressOf subDoWork)
  19.             'New ProgressChangedEventHandler(AddressOf onProgressChanged)
  20.             'New RunWorkerCompletedEventHandler(AddressOf onWorkerCompleted)
  21.  
  22.             ' Instantiate the worker
  23.             Dim worker As New BackgroundWorker
  24.  
  25.             ' Tie in the DoWork event
  26.             AddHandler worker.DoWork, subDoWork ' Create delegate handle
  27.  
  28.             ' Tie in the ReportsProgress event
  29.             If subProgressChanged Is Nothing Then
  30.                 worker.WorkerReportsProgress = False
  31.             Else
  32.                 worker.WorkerReportsProgress = True
  33.                 AddHandler worker.ProgressChanged, subProgressChanged ' Create callback handle
  34.             End If
  35.  
  36.             ' Tie in the RunWorkerCompleted event
  37.             If subProgressChanged IsNot Nothing Then AddHandler worker.RunWorkerCompleted, subWorkerCompleted ' Create completion handle
  38.  
  39.             ' Allow Cancelation
  40.             worker.WorkerSupportsCancellation = SupportCancelation
  41.  
  42.             '* Start the worker
  43.             If StartWorkerNow = True Then StartWorker()
  44.         End Sub
  45.  
  46.         ''' <summary>Start or Re-start the background worker. If the worker is still running, this sub will do nothing.</summary>
  47.         Public Sub StartWorker()
  48.             If _worker.IsBusy = False Then _worker.RunWorkerAsync()
  49.         End Sub
  50.  
  51.         ''' <summary>Notify the worker that it should cancel. Will only work if the worker supports cancellation.</summary>
  52.         Public Sub CancelWorker()
  53.             If _worker.WorkerSupportsCancellation = True And _worker.IsBusy Then _worker.CancelAsync()
  54.         End Sub
  55.  
  56.         ''' <summary>Releases all resources used by the System.ComponentModel.Component</summary>
  57.         Public Sub Dispose()
  58.             _worker.Dispose()
  59.         End Sub
  60.     End Class
Jun 11 '09 #2

Sign in to post your reply or Sign up for a free account.

Similar topics

32
by: Fresh Air Rider | last post by:
Hi I understand that ASP.net 2.0 (Whidbey) is going to reduce coding by 70%. Surely this is going to de-skill or dumb down the developer's task and open up the task of web development to less...
8
by: Martin | last post by:
I hope not, but, I think the answer to this question is "it can't be done". Northwind sample database. Orders form. Go to a new record. Select a customer in "Bill To:" Don't enter any...
23
by: Abhi | last post by:
Hi.. I wanted the C source code in machine readable format for the book "Numerical Recipes in C". I got hold of the pdf version of the book somehow. Does anyone have the complete C code of the...
169
by: JohnQ | last post by:
(The "C++ Grammer" thread in comp.lang.c++.moderated prompted this post). It would be more than a little bit nice if C++ was much "cleaner" (less complex) so that it wasn't a major world wide...
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: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
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
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...

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.