vb.net - Update a label from a task -


i'm trying implement tasks in program. launch task produce log file, , after, want update label "log sucessfully saved".

here code

private function createlog(byval mylist list(of classtest))         dim sw new streamwriter("log_list.log")         index = 1 mylist.count - 1             sw.writeline(mylist(index).comments)         next         sw.close()         try             me.invoke(updatelabel("log sucessfully saved"))         catch ex exception          end try         return 1     end function      private function updatelabel(byval text string)         label1.text = text         return 1     end function 

i launch task main form in load() :

 dim tasktest = task(of integer).factory.startnew(function() createlog(thelist)) 

(i don't know if better use factory or declare task , task.start())

i have error on label update :

cross-thread operation not valid: control 'label1' accessed thread other thread created on.

could please explain why doesn't work invoke method ? , have alternative solution ?

thanks help

first, updatelabel should sub, not function. second, line wrong:

me.invoke(updatelabel("log sucessfully saved")) 

read again. are, in order, executing updatelabel function, passing result of function me.invoke (if used sub instead of function, compiler should have warned error).

this doesn't raise compiler errors because function declared without as [type] defaulted as object, can cast anything. should be:

me.invoke(sub()               updatelabel("log sucessfully saved")           end sub) 

to simplify, code can rewritten this:

private sub createlog(byval mylist list(of classtest))     dim sw new streamwriter("log_list.log")     index = 1 mylist.count - 1         sw.writeline(mylist(index).comments)     next     sw.close()     me.invoke(sub()                   label1.text = "log sucessfully saved"               end sub) end sub 

Comments

Popular posts from this blog

Payment information shows nothing in one page checkout page magento -

tcpdump - How to check if server received packet (acknowledged) -