vb.net - How does the ProgressBar.PerformStep() function work? -
i'm quite confused progress bar in vb.net, here code
private sub form1_load(byval sender system.object, byval e system.eventargs) handles mybase.load progressbar_my.minimum = 0 progressbar_my.maximum = 10 progressbar_my.step = 1 end sub private sub button1_click(byval sender system.object, byval e system.eventargs) handles button1.click progressbar_my.performstep() threading.thread.sleep(5000) if 1 = 1 progressbar_my.performstep() progressbar_my.performstep() end if 'threading.thread.sleep(2000) end sub
for above code, expected after click button1
, progress bar increase progress status 1, pause 5 sec
, increase progress status 2 @ once.
however, after ran above code, saw after click button1
, progress bar increase 3 continually after 5 sec
.
can tell me why behaves , how should program code can increase 1, pause 5 sec , increase 2?
thanks in advance!
i think seeing (or not seeing) fact progress bar takes finite amount of time advance each step.
when call threading.thread.sleep
on ui thread stops progress bar being redrawn until after sleep
what should update progress bar on background worker instead, think see effect desire.
add backgroundworker form
change button click code start worker:
private sub frmso_load(sender object, e eventargs) handles mybase.load progressbar_my.minimum = 0 progressbar_my.maximum = 10 progressbar_my.step = 1 end sub private sub button1_click(byval sender system.object, byval e system.eventargs) handles button1.click backgroundworker1.runworkerasync end sub
then perform update in dowork event:
'define delegate handle updates ui thread private delegate sub performstepcallback() private sub backgroundworker1_dowork(sender object, e system.componentmodel.doworkeventargs) handles backgroundworker1.dowork dim cb performstepcallback = addressof progressbar_my.performstep me.begininvoke(cb) threading.thread.sleep(5000) me.begininvoke(cb) me.begininvoke(cb) end sub
Comments
Post a Comment