大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
thread = New System.Threading.Thread(AddressOf DoStuff)thread.Start()Private Sub DoStuff() 'error occurs here' Me.Text = "Stuff"End Sub
我们提供的服务有:网站建设、网站制作、微信公众号开发、网站优化、网站认证、肃州ssl等。为1000多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的肃州网站制作公司
方案1:
Private Sub DoStuff() Me.CheckForIllegalCrossThreadCalls = False Me.Text = "Stuff"End Sub
方案二thread = New System.Threading.Thread(AddressOf DoStuff)thread.Start()Private Delegate Sub DoStuffDelegate()Private Sub DoStuff() If Me.InvokeRequired Then Me.Invoke(New DoStuffDelegate(AddressOf DoStuff)) Else Me.Text = "Stuff" End IfEnd Sub
用
t.Suspend() 这个是挂起线程。是一个异步方法。
t.Sleep 我看了是一个同步方法。要等这个方法运行完了才继续下一步。
这和from.show和 from.showdiaglog区别差不多!
至于疑问2我也没找到原因。
t1 = New Threading.Thread(AddressOf sDownFile) 你这句都没代入参数啊。
改成这样试试 t1 = New Threading.Thread(AddressOf sDownFile(参数1,参数2))
楼上回答不对,这个问题很常见,就是在线程中使用到了控件,在这种状况下,不能直接操作控件属性,而只能通过委托的方法去实现
.net 为了安全,默认不允许跨线程访问操作控件。只能谁创建了控件,谁操作。
这个textbox只能从主线程访问。
解决方案一般有两个
1. 使用委托机制。委托创建线程去访问
2. 设置Me.CheckForIllegalCrossThreadCalls = False 表示不检测跨线程错误
还是并发加锁,你判断时候,上一个线程还未执行_datalist.RemoveAt(0),所0,然后就会出错了,你最好先 Remove到一个变量里,然后执行发送,在Remove和判断的时候加锁