重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用委托和Invoke,下面是个VB的例子
成都创新互联专注于企业成都营销网站建设、网站重做改版、嘉鱼网站定制设计、自适应品牌网站建设、HTML5、商城建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为嘉鱼等各大城市提供网站开发制作服务。
Delegate Sub SetTextCallback(ByVal pstrText As String)
Private Sub SbShowMessage(ByVal strMessage As String)
If Me.lbMessage.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SbShowMessage)
Me.Invoke(d, New Object() {strMessage})
Else
lbMessage.Items.Add(Now.ToString("yyyy/MM/dd HH:mm:ss") " " strMessage " ")
DoEvents()
lbMessage.SelectedIndex = lbMessage.Items.Count - 1
Dim intCounter As Integer
intCounter = lbMessage.Items.Count
If intCounter 1000 Then
For i As Integer = 1 To intCounter - 1000
lbMessage.Items.RemoveAt(0)
Next
End If
End If
最简单的方法是
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Control.CheckForIllegalCrossThreadCalls = False'加入这句代码就可以在别的线程访问窗体控件了
End Sub
建议你使用BackGroundWorker控件。将代码写入控件的事件中,使用它的Start方法就可以开始工作了。是与主程序同时进行的。
不可以,但是能够在主线程的基础上调用委托(Invoke)。(主线程会被占用)
例子:
Dim thr As Threading.Thread
Public Delegate Sub VoidDelegate()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
thr = New Threading.Thread(AddressOf Where)
thr.Start()
End Sub
Public Sub Where()
Me.BeginInvoke(New VoidDelegate(AddressOf WhereThr))
End Sub
Public Sub WhereThr()
Me.TextBox.text="0123456789"
End Sub
(Invoke)这种情况下,主线程被占用,所有由主线程执行程序,都将被(wherethr函数执行结束)后执行。
建立委托。 Me.Invoke——同步委托 或者 Me.BeginInvoke——异步委托 例:Me.Invoke(Sub Textbox.Text="这是一个示例" End Sub)