473,406 Members | 2,343 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,406 software developers and data experts.

Threading a ShowDialog? - progress form.

I will try my best to ask this question correctly. I think in the end the
code will make more sence of what I am trying to accomplish. I am just not
sure of what to search for on the net.

I have a form that has a button. ( this form is a child form of a parent
form ( main form ).
Anway...in this child form I have a button, and if clicked a bunch of code
will get executed.
I would like to show a Progress Bar / form in modal/ShowDialog format when
this runs and slowely update the progress bar as each sub runs.

I cant just call the form with fStatus.ShowDialog() cause then all code
stops till this form is closed. So What I am trying is to somehow open this
form in a different thread - in ShowDialog format, so I can continue to run
my code, and as my code runs, update the progress bar on the new status form
created.
At the end, close the status form, and let the user continue on.
As the status form is open, the whole app is 'locked' because of showdialog,
until it is complete.

I hope this makes sence.

Below I have code that I think is in the right direction, but I am at a wall
as I have never done any thread processing.

Thanks for your help,

Miro
'==== some command button _click event on a current form. 'which is a child
form of a mdi form.
'Somewhere here change the icon to be hourglass

Dim fStatus As New frmStatus()

'im pulling code out of my butt for this next line here cause ive
never done this before
Dim Thread1 As New System.Threading.Thread(AddressOf
fStatus.ShowDialog)

Thread1.Start()

'pbStatus is a status bar / progress bar
fStatus.pbStatus.Value += 10 'Increment Push Button
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

'Somewhere here change the icon to be pointer again.

'close the form
fStatus.Close()
'im assuming i have to close the thread too or something?
fStatus.Dispose()
'user should have access to the whole app again.

'==== end of some command button _click event
Oct 13 '06 #1
5 10864
Miro,
Are you using VS 2005 (.NET 2.0) or VS 2002/2003 (.NET 1.x)?

..NET 2.0's new BackgroundWorker component makes this really easy!

For example create a new dialog from, put a BackgroundWorker object on it,
along with a ProgressBar.

Using the following code for the form.

Option Strict On
Option Explicit On

Imports System.ComponentModel
Imports System.Threading

Public Class LongProcessDialog

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object,
ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For percentProgress As Integer = 1 To 100
Thread.Sleep(TimeSpan.FromSeconds(1.5))
BackgroundWorker1.ReportProgress(percentProgress)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object,
ByVal e As ProgressChangedEventArgs) Handles
BackgroundWorker1.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object,
ByVal e As RunWorkerCompletedEventArgs) Handles
BackgroundWorker1.RunWorkerCompleted
Close()
End Sub

End Class

The BackgroundWorker1_DoWork event is where all the real work (long running
process) is being done. Within it you call BackgroundWorker1.ReportProgress
to have the dialog update its controls.

The BackgroundWorker itself handles calling Control.Invoke where needed.

BackgroundWorker also supports passing a parameter to the background thread,
returning results (including exceptions) as well as cancelling the
background thread!

My Xml Export Sample, uses the BackgroundWorker within an Outlook form to
perform a long running process.

http://www.tsbradley.net/Samples/VST...rt.Sample.aspx
--
Hope this helps
Jay B. Harlow
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:%2****************@TK2MSFTNGP04.phx.gbl...
>I will try my best to ask this question correctly. I think in the end the
code will make more sence of what I am trying to accomplish. I am just not
sure of what to search for on the net.

I have a form that has a button. ( this form is a child form of a parent
form ( main form ).
Anway...in this child form I have a button, and if clicked a bunch of code
will get executed.
I would like to show a Progress Bar / form in modal/ShowDialog format when
this runs and slowely update the progress bar as each sub runs.

I cant just call the form with fStatus.ShowDialog() cause then all code
stops till this form is closed. So What I am trying is to somehow open
this form in a different thread - in ShowDialog format, so I can continue
to run my code, and as my code runs, update the progress bar on the new
status form created.
At the end, close the status form, and let the user continue on.
As the status form is open, the whole app is 'locked' because of
showdialog, until it is complete.

I hope this makes sence.

Below I have code that I think is in the right direction, but I am at a
wall as I have never done any thread processing.

Thanks for your help,

Miro
'==== some command button _click event on a current form. 'which is a
child form of a mdi form.
'Somewhere here change the icon to be hourglass

Dim fStatus As New frmStatus()

'im pulling code out of my butt for this next line here cause ive
never done this before
Dim Thread1 As New System.Threading.Thread(AddressOf
fStatus.ShowDialog)

Thread1.Start()

'pbStatus is a status bar / progress bar
fStatus.pbStatus.Value += 10 'Increment Push Button
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

'Somewhere here change the icon to be pointer again.

'close the form
fStatus.Close()
'im assuming i have to close the thread too or something?
fStatus.Dispose()
'user should have access to the whole app again.

'==== end of some command button _click event
Oct 15 '06 #2
Im using vb express 2005

This is what i needed to get me started.

I will search the web and what I need for Background worker

From what I understand reading the code, I cannot have the code I require in
the "form", i have to move the sub calls to the "background worker" sub, and
call the origina subs in there.

Thanks much!

Miro

"Jay B. Harlow" <Ja************@tsbradley.netwrote in message
news:30**********************************@microsof t.com...
Miro,
Are you using VS 2005 (.NET 2.0) or VS 2002/2003 (.NET 1.x)?

.NET 2.0's new BackgroundWorker component makes this really easy!

For example create a new dialog from, put a BackgroundWorker object on it,
along with a ProgressBar.

Using the following code for the form.

Option Strict On
Option Explicit On

Imports System.ComponentModel
Imports System.Threading

Public Class LongProcessDialog

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object,
ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For percentProgress As Integer = 1 To 100
Thread.Sleep(TimeSpan.FromSeconds(1.5))
BackgroundWorker1.ReportProgress(percentProgress)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object,
ByVal e As ProgressChangedEventArgs) Handles
BackgroundWorker1.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As
Object, ByVal e As RunWorkerCompletedEventArgs) Handles
BackgroundWorker1.RunWorkerCompleted
Close()
End Sub

End Class

The BackgroundWorker1_DoWork event is where all the real work (long
running process) is being done. Within it you call
BackgroundWorker1.ReportProgress to have the dialog update its controls.

The BackgroundWorker itself handles calling Control.Invoke where needed.

BackgroundWorker also supports passing a parameter to the background
thread, returning results (including exceptions) as well as cancelling the
background thread!

My Xml Export Sample, uses the BackgroundWorker within an Outlook form to
perform a long running process.

http://www.tsbradley.net/Samples/VST...rt.Sample.aspx
--
Hope this helps
Jay B. Harlow
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:%2****************@TK2MSFTNGP04.phx.gbl...
>>I will try my best to ask this question correctly. I think in the end the
code will make more sence of what I am trying to accomplish. I am just
not sure of what to search for on the net.

I have a form that has a button. ( this form is a child form of a parent
form ( main form ).
Anway...in this child form I have a button, and if clicked a bunch of
code will get executed.
I would like to show a Progress Bar / form in modal/ShowDialog format
when this runs and slowely update the progress bar as each sub runs.

I cant just call the form with fStatus.ShowDialog() cause then all code
stops till this form is closed. So What I am trying is to somehow open
this form in a different thread - in ShowDialog format, so I can continue
to run my code, and as my code runs, update the progress bar on the new
status form created.
At the end, close the status form, and let the user continue on.
As the status form is open, the whole app is 'locked' because of
showdialog, until it is complete.

I hope this makes sence.

Below I have code that I think is in the right direction, but I am at a
wall as I have never done any thread processing.

Thanks for your help,

Miro
'==== some command button _click event on a current form. 'which is a
child form of a mdi form.
'Somewhere here change the icon to be hourglass

Dim fStatus As New frmStatus()

'im pulling code out of my butt for this next line here cause ive
never done this before
Dim Thread1 As New System.Threading.Thread(AddressOf
fStatus.ShowDialog)

Thread1.Start()

'pbStatus is a status bar / progress bar
fStatus.pbStatus.Value += 10 'Increment Push Button
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

'Somewhere here change the icon to be pointer again.

'close the form
fStatus.Close()
'im assuming i have to close the thread too or something?
fStatus.Dispose()
'user should have access to the whole app again.

'==== end of some command button _click event

Oct 15 '06 #3
Miro,
From what I understand reading the code, I cannot have the code I require
in the "form",
It depends on what you mean by "form", do you mean your "main" form, or do
mean your "worker" form.

I would put all the subs in a "worker" form, this "worker" form would
contain a ProgressBar, BackgroundWorker component, plus any other controls
that may be needed (such as inputs, cancel buttons.

The "main" form would display the "worker" form:

' someplace one the "main" form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
EventArgs) Handles Button1.Click
Using dialog As New WorkerDialog
dialog.ShowDialog()
End Using
End Sub

http://msdn2.microsoft.com/en-us/lib...undworker.aspx
--
Hope this helps
Jay B. Harlow
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:O4**************@TK2MSFTNGP05.phx.gbl...
Im using vb express 2005

This is what i needed to get me started.

I will search the web and what I need for Background worker

From what I understand reading the code, I cannot have the code I require
in the "form", i have to move the sub calls to the "background worker"
sub, and call the origina subs in there.

Thanks much!

Miro

"Jay B. Harlow" <Ja************@tsbradley.netwrote in message
news:30**********************************@microsof t.com...
>Miro,
Are you using VS 2005 (.NET 2.0) or VS 2002/2003 (.NET 1.x)?

.NET 2.0's new BackgroundWorker component makes this really easy!

For example create a new dialog from, put a BackgroundWorker object on
it, along with a ProgressBar.

Using the following code for the form.

Option Strict On
Option Explicit On

Imports System.ComponentModel
Imports System.Threading

Public Class LongProcessDialog

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object,
ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For percentProgress As Integer = 1 To 100
Thread.Sleep(TimeSpan.FromSeconds(1.5))
BackgroundWorker1.ReportProgress(percentProgress)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object,
ByVal e As ProgressChangedEventArgs) Handles
BackgroundWorker1.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As
Object, ByVal e As RunWorkerCompletedEventArgs) Handles
BackgroundWorker1.RunWorkerCompleted
Close()
End Sub

End Class

The BackgroundWorker1_DoWork event is where all the real work (long
running process) is being done. Within it you call
BackgroundWorker1.ReportProgress to have the dialog update its controls.

The BackgroundWorker itself handles calling Control.Invoke where needed.

BackgroundWorker also supports passing a parameter to the background
thread, returning results (including exceptions) as well as cancelling
the background thread!

My Xml Export Sample, uses the BackgroundWorker within an Outlook form to
perform a long running process.

http://www.tsbradley.net/Samples/VST...rt.Sample.aspx
--
Hope this helps
Jay B. Harlow
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:%2****************@TK2MSFTNGP04.phx.gbl...
>>>I will try my best to ask this question correctly. I think in the end
the code will make more sence of what I am trying to accomplish. I am
just not sure of what to search for on the net.

I have a form that has a button. ( this form is a child form of a
parent form ( main form ).
Anway...in this child form I have a button, and if clicked a bunch of
code will get executed.
I would like to show a Progress Bar / form in modal/ShowDialog format
when this runs and slowely update the progress bar as each sub runs.

I cant just call the form with fStatus.ShowDialog() cause then all
code stops till this form is closed. So What I am trying is to somehow
open this form in a different thread - in ShowDialog format, so I can
continue to run my code, and as my code runs, update the progress bar on
the new status form created.
At the end, close the status form, and let the user continue on.
As the status form is open, the whole app is 'locked' because of
showdialog, until it is complete.

I hope this makes sence.

Below I have code that I think is in the right direction, but I am at a
wall as I have never done any thread processing.

Thanks for your help,

Miro
'==== some command button _click event on a current form. 'which is a
child form of a mdi form.
'Somewhere here change the icon to be hourglass

Dim fStatus As New frmStatus()

'im pulling code out of my butt for this next line here cause ive
never done this before
Dim Thread1 As New System.Threading.Thread(AddressOf
fStatus.ShowDialog)

Thread1.Start()

'pbStatus is a status bar / progress bar
fStatus.pbStatus.Value += 10 'Increment Push Button
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

'Somewhere here change the icon to be pointer again.

'close the form
fStatus.Close()
'im assuming i have to close the thread too or something?
fStatus.Dispose()
'user should have access to the whole app again.

'==== end of some command button _click event

Oct 15 '06 #4
I was trying to keep the sub calls in the Main form,
and somehow update the "worker form" from anywhere.

I thought it would be a lot easier to have a modal form but be able to keep
running the code from behind.

I was hoping to make a "generic" "working" form and have the same one called
from everywhere.
Example:
Sub A calls B calls C

Sub D calls B and E
where E calls F

Since B can be called from 2 different original subs' and I would like to
update a "differnet" / "or the same" worker form, I wanted the subs,
themselves take care of the worker form, rather than the worker form take
care of the subs'.

Miro

"Jay B. Harlow" <Ja************@tsbradley.netwrote in message
news:A5**********************************@microsof t.com...
Miro,
>From what I understand reading the code, I cannot have the code I require
in the "form",
It depends on what you mean by "form", do you mean your "main" form, or do
mean your "worker" form.

I would put all the subs in a "worker" form, this "worker" form would
contain a ProgressBar, BackgroundWorker component, plus any other controls
that may be needed (such as inputs, cancel buttons.

The "main" form would display the "worker" form:

' someplace one the "main" form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
EventArgs) Handles Button1.Click
Using dialog As New WorkerDialog
dialog.ShowDialog()
End Using
End Sub

http://msdn2.microsoft.com/en-us/lib...undworker.aspx
--
Hope this helps
Jay B. Harlow
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:O4**************@TK2MSFTNGP05.phx.gbl...
>Im using vb express 2005

This is what i needed to get me started.

I will search the web and what I need for Background worker

From what I understand reading the code, I cannot have the code I require
in the "form", i have to move the sub calls to the "background worker"
sub, and call the origina subs in there.

Thanks much!

Miro

"Jay B. Harlow" <Ja************@tsbradley.netwrote in message
news:30**********************************@microso ft.com...
>>Miro,
Are you using VS 2005 (.NET 2.0) or VS 2002/2003 (.NET 1.x)?

.NET 2.0's new BackgroundWorker component makes this really easy!

For example create a new dialog from, put a BackgroundWorker object on
it, along with a ProgressBar.

Using the following code for the form.

Option Strict On
Option Explicit On

Imports System.ComponentModel
Imports System.Threading

Public Class LongProcessDialog

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object,
ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For percentProgress As Integer = 1 To 100
Thread.Sleep(TimeSpan.FromSeconds(1.5))
BackgroundWorker1.ReportProgress(percentProgress)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object,
ByVal e As ProgressChangedEventArgs) Handles
BackgroundWorker1.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As
Object, ByVal e As RunWorkerCompletedEventArgs) Handles
BackgroundWorker1.RunWorkerCompleted
Close()
End Sub

End Class

The BackgroundWorker1_DoWork event is where all the real work (long
running process) is being done. Within it you call
BackgroundWorker1.ReportProgress to have the dialog update its controls.

The BackgroundWorker itself handles calling Control.Invoke where needed.

BackgroundWorker also supports passing a parameter to the background
thread, returning results (including exceptions) as well as cancelling
the background thread!

My Xml Export Sample, uses the BackgroundWorker within an Outlook form
to perform a long running process.

http://www.tsbradley.net/Samples/VST...rt.Sample.aspx
--
Hope this helps
Jay B. Harlow
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:%2****************@TK2MSFTNGP04.phx.gbl.. .
I will try my best to ask this question correctly. I think in the end
the code will make more sence of what I am trying to accomplish. I am
just not sure of what to search for on the net.

I have a form that has a button. ( this form is a child form of a
parent form ( main form ).
Anway...in this child form I have a button, and if clicked a bunch of
code will get executed.
I would like to show a Progress Bar / form in modal/ShowDialog format
when this runs and slowely update the progress bar as each sub runs.

I cant just call the form with fStatus.ShowDialog() cause then all
code stops till this form is closed. So What I am trying is to somehow
open this form in a different thread - in ShowDialog format, so I can
continue to run my code, and as my code runs, update the progress bar
on the new status form created.
At the end, close the status form, and let the user continue on.
As the status form is open, the whole app is 'locked' because of
showdialog, until it is complete.

I hope this makes sence.

Below I have code that I think is in the right direction, but I am at a
wall as I have never done any thread processing.

Thanks for your help,

Miro
'==== some command button _click event on a current form. 'which is a
child form of a mdi form.
'Somewhere here change the icon to be hourglass

Dim fStatus As New frmStatus()

'im pulling code out of my butt for this next line here cause
ive never done this before
Dim Thread1 As New System.Threading.Thread(AddressOf
fStatus.ShowDialog)

Thread1.Start()

'pbStatus is a status bar / progress bar
fStatus.pbStatus.Value += 10 'Increment Push Button
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later

'Somewhere here change the icon to be pointer again.

'close the form
fStatus.Close()
'im assuming i have to close the thread too or something?
fStatus.Dispose()
'user should have access to the whole app again.

'==== end of some command button _click event



Oct 16 '06 #5
I thought it would be a lot easier to have a modal form but be able to
keep running the code from behind.
I agree, on the surface a modal form would appear be a lot easier. However
in practice I am sure you will find the BackgroundWorker component to be
significantly easier. Considering that all the "heavy lifting" has been done
for you. All you really need to do is insert your code in the DoWork event.
Occasionally you may want to, but don't need to, call the BackgroundWorker
..ReportProgress method.

I was hoping to make a "generic" "working" form and have the same one
called from everywhere.
Example:
Sub A calls B calls C

Sub D calls B and E
where E calls F
It sounds like a good use for inheritance.

WorkerForm is a base form that has the common routines (B) along with the
progress bar & background worker. The DoWork event handler would call an
overridable method DoWork.

AForm would inherit from WorkerForm overriding the DoWork method calling Sub
A.

DForm would inherit from WorkerForm overiding the DoWork method calling Sub
D.

Sub A would be in AForm, while Sub D would be in DForm.

>I was trying to keep the sub calls in the Main form,
and somehow update the "worker form" from anywhere.
You should be able to use the instance of the Form from the Forms
collection. The caveat is you need to handle the DoWork event to get the
background started...

Personally I find it cleaner to encapsulate (one of the tenants of Object
Oriented development) the "worker" logic all in the "worker form"...

--
Hope this helps
Jay B. Harlow
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:uP**************@TK2MSFTNGP04.phx.gbl...
>I was trying to keep the sub calls in the Main form,
and somehow update the "worker form" from anywhere.

I thought it would be a lot easier to have a modal form but be able to
keep running the code from behind.

I was hoping to make a "generic" "working" form and have the same one
called from everywhere.
Example:
Sub A calls B calls C

Sub D calls B and E
where E calls F

Since B can be called from 2 different original subs' and I would like to
update a "differnet" / "or the same" worker form, I wanted the subs,
themselves take care of the worker form, rather than the worker form take
care of the subs'.

Miro

"Jay B. Harlow" <Ja************@tsbradley.netwrote in message
news:A5**********************************@microsof t.com...
>Miro,
>>From what I understand reading the code, I cannot have the code I
require in the "form",
It depends on what you mean by "form", do you mean your "main" form, or
do mean your "worker" form.

I would put all the subs in a "worker" form, this "worker" form would
contain a ProgressBar, BackgroundWorker component, plus any other
controls that may be needed (such as inputs, cancel buttons.

The "main" form would display the "worker" form:

' someplace one the "main" form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
EventArgs) Handles Button1.Click
Using dialog As New WorkerDialog
dialog.ShowDialog()
End Using
End Sub

http://msdn2.microsoft.com/en-us/lib...undworker.aspx
--
Hope this helps
Jay B. Harlow
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:O4**************@TK2MSFTNGP05.phx.gbl...
>>Im using vb express 2005

This is what i needed to get me started.

I will search the web and what I need for Background worker

From what I understand reading the code, I cannot have the code I
require in the "form", i have to move the sub calls to the "background
worker" sub, and call the origina subs in there.

Thanks much!

Miro

"Jay B. Harlow" <Ja************@tsbradley.netwrote in message
news:30**********************************@micros oft.com...
Miro,
Are you using VS 2005 (.NET 2.0) or VS 2002/2003 (.NET 1.x)?

.NET 2.0's new BackgroundWorker component makes this really easy!

For example create a new dialog from, put a BackgroundWorker object on
it, along with a ProgressBar.

Using the following code for the form.

Option Strict On
Option Explicit On

Imports System.ComponentModel
Imports System.Threading

Public Class LongProcessDialog

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object,
ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For percentProgress As Integer = 1 To 100
Thread.Sleep(TimeSpan.FromSeconds(1.5))
BackgroundWorker1.ReportProgress(percentProgress)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As
Object, ByVal e As ProgressChangedEventArgs) Handles
BackgroundWorker1.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As
Object, ByVal e As RunWorkerCompletedEventArgs) Handles
BackgroundWorker1.RunWorkerCompleted
Close()
End Sub

End Class

The BackgroundWorker1_DoWork event is where all the real work (long
running process) is being done. Within it you call
BackgroundWorker1.ReportProgress to have the dialog update its
controls.

The BackgroundWorker itself handles calling Control.Invoke where
needed.

BackgroundWorker also supports passing a parameter to the background
thread, returning results (including exceptions) as well as cancelling
the background thread!

My Xml Export Sample, uses the BackgroundWorker within an Outlook form
to perform a long running process.

http://www.tsbradley.net/Samples/VST...rt.Sample.aspx
--
Hope this helps
Jay B. Harlow
.NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Miro" <mi******@golden.netwrote in message
news:%2****************@TK2MSFTNGP04.phx.gbl. ..
>I will try my best to ask this question correctly. I think in the end
>the code will make more sence of what I am trying to accomplish. I am
>just not sure of what to search for on the net.
>
I have a form that has a button. ( this form is a child form of a
parent form ( main form ).
Anway...in this child form I have a button, and if clicked a bunch of
code will get executed.
I would like to show a Progress Bar / form in modal/ShowDialog format
when this runs and slowely update the progress bar as each sub runs.
>
I cant just call the form with fStatus.ShowDialog() cause then all
code stops till this form is closed. So What I am trying is to
somehow open this form in a different thread - in ShowDialog format,
so I can continue to run my code, and as my code runs, update the
progress bar on the new status form created.
At the end, close the status form, and let the user continue on.
As the status form is open, the whole app is 'locked' because of
showdialog, until it is complete.
>
I hope this makes sence.
>
Below I have code that I think is in the right direction, but I am at
a wall as I have never done any thread processing.
>
Thanks for your help,
>
Miro
>
>
'==== some command button _click event on a current form. 'which is a
child form of a mdi form.
'Somewhere here change the icon to be hourglass
>
Dim fStatus As New frmStatus()
>
'im pulling code out of my butt for this next line here cause
ive never done this before
Dim Thread1 As New System.Threading.Thread(AddressOf
fStatus.ShowDialog)
>
Thread1.Start()
>
'pbStatus is a status bar / progress bar
fStatus.pbStatus.Value += 10 'Increment Push Button
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
>
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
fStatus.pbStatus.Value += 10
System.Threading.Thread.Sleep(2000) 'Will Call some sub instead later
>
'Somewhere here change the icon to be pointer again.
>
'close the form
fStatus.Close()
'im assuming i have to close the thread too or something?
fStatus.Dispose()
'user should have access to the whole app again.
>
'==== end of some command button _click event
>

Oct 16 '06 #6

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

Similar topics

5
by: Charles A. Lackman | last post by:
Hello, I am making a app that creates a thread to show a clipboard. If the clipboard is double clicked, another window is displayed, the event is handled inside the main app. What I would like...
4
by: Charles A. Lackman | last post by:
Hello and thank you for your assistance. I have attempted to accomplish what I need using delegates with no success. i.e. //Button Click// Dim PollThread As Threading.Thread PollThread = New...
4
by: Max | last post by:
Playing around with multi-threading programs and ran into this little problem that maybe someone here could explain... Basically I have a class which launches a form object. Once the form is...
6
by: hzgt9b | last post by:
Using VS 2003, .NET: I developed a windows application that performs several actions based on an input file. The application displays a progress bar as each action executes. Based on new...
14
by: Simon Verona | last post by:
I think I'm doing this wrong : I have a class with a public shared method such as follows: public shared sub myFunction dim frm as new myFrm dim t as new Threading.Thread(Addressof ...
0
by: Flack | last post by:
Hey guys, I'm trying to read a file and add some nodes to a treee view control. I would like the GUI to remain interactive and have a progress bar and text box be updated with info as the file...
7
by: Mike P | last post by:
I am trying to write my first program using threading..basically I am moving messages from an Outlook inbox and want to show the user where the process is up to without having to wait until it has...
10
by: Mike P | last post by:
I have two loops that I am running, one of which is calling a method which contains the second one. What I want to happen is for when the second loop exits (the inner loop), then the code will...
5
by: CCLeasing | last post by:
For an application I'm creating I want to create a 'fake' progress bar. By fake I mean a progress bar that looks like it's doing something but actually isn't. I know philosophically this isn't...
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: 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?
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
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,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

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.