<davidst95@gmail.comwrote in message
news:1163428883.308461.208140@i42g2000cwa.googlegr oups.com...
Quote:
Thanks for the reply. Wouldn't "t.Sleep(1000)' just slow down the
whole thread? I tried it out and have similar results. What I want
to try to do is run a thread and have another thread refresh the form
and check the cancel button without slowing down the 'StartProcess'
thread.
>
When I remove the thread itself and just run 'StartProcess', the time
decreases in half.
>
Thanks again.
>
David
>
>
Robinson wrote:
Quote:
Quote:
Dim t As Threading.Thread
t = New Threading.Thread(AddressOf StartProcess)
t.IsBackground = True
t.Priority = ThreadPriority.Highest
t.Start()
>>
>Good, you've created a new thread :)
>>
Quote:
>
Do
>
Thread.CurrentThread.Sleep(500)
Application.DoEvents()
if bCancel=true then
t.Abort()
exit do
end if
>
Loop
>
>>
>Ahh, you are sleeping the CurrentThread, which is your main thread, not
>the
>thread you created. So, instead of sleeping there, you should sleep in
>StartProcess. Secondly, it's rather bad to call "t.Abort". You will get
>no
>end of problems especially if your thread is handling COM objects. The
>accepted pattern for dealing with threads is to flag a "bCancel" inside
>the
>thread that it checks periodically so it can terminate cleanly.
>>
>>
Quote:
>
When I add 'StartProcess' into a thread, it's about twice as slow if it
just ran it without a thread. Could anyone tell me what I'm not doing
right? Thanks. I played around with this all day and I'm lost.
Thanks.
>
David
>
>
Oh okay, I misunderstood. I thought you were wanting to sleep the worker
thread so it didn't take too much time away from the main GUI thread (which
is the more normal scenario). I suggest you re-archietect what you are
doing slightly. Let your worker thread run free inside a loop checking for
"cancelled = true", at which point it exits. You then can "fire and forget"
the worker thread.
When your main thread is finished, it can "invoke" a delegate on your form
to say it's finished, or a delegate to say it was cancelled or a delegate to
say it was failed (or you can put all 3 into the same method).
Something like this:
User Action
Create Thread
Start Thread (
[Thread loops doing it's business]
[If bCancelled Then Exit Thread]
Exit:
Invoke Completed Method on Main Form )
Completed:
Update UI