16,557
社区成员
发帖
与我相关
我的任务
分享
Imports System.Threading
Imports System.Runtime.Remoting.Messaging
Public Class Form1
Private Delegate Sub myDelegate(ByVal myString As String) '自定义一个委托
Dim MyThread As System.Threading.Thread
Private Sub SetWindowText(ByVal myString As String) '与委托相同签名的函数或过程
Me.Text = myString
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MyThread = New System.Threading.Thread(AddressOf sum)
MyThread.Start()
End Sub
Private Sub sum()
Dim sum As Single
sum = Rnd()
Dim b As myDelegate = New myDelegate(AddressOf SetWindowText)
'Me.Invoke(New myDelegate(AddressOf SetWindowText), sum.ToString) '委托的调用
'Me.Invoke(b, sum.ToString)
'这儿将me.invoke替换为下面的BeginInvoke又会导致非法调用控件啊.
Dim myar As IAsyncResult = b.BeginInvoke(sum.ToString, New AsyncCallback(AddressOf CallBackThread), "执行完毕!")
End Sub
Private Sub CallBackThread(ByVal myar As IAsyncResult)
msgbox( "当前线程是:" & System.Threading.Thread.CurrentThread.ManagedThreadId)
Dim ar As AsyncResult = CType(myar, AsyncResult)
Dim b As myDelegate = CType(ar.AsyncDelegate, myDelegate)
b.EndInvoke(myar)
MsgBox(myar.AsyncState.ToString)
End Sub
End Class
Private Delegate Sub BeginInvokeDelegate()
Private Sub SetTextBoxText()
lbl2.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
End Sub
Private Sub ThreadMethod()
Thread.Sleep(3000)
Me.BeginInvoke(New BeginInvokeDelegate(AddressOf SetTextBoxText))
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim t As New Thread(AddressOf ThreadMethod)
t.Start()
lbl1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
End Sub
Private Delegate Sub Action()
Private Delegate Sub BeginInvokeDelegate(myString As String, action As Action)
Private Sub SetTextBoxText(myString As String, action As Action)
lbl2.Text = String.Format("我是传参:{0},当前时间:{1}", myString, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))
action()
End Sub
Private Sub ThreadMethod(myString As String)
Thread.Sleep(3000)
Me.BeginInvoke(New BeginInvokeDelegate(AddressOf SetTextBoxText), myString, New Action(AddressOf CallBackSub))
End Sub
Private Sub CallBackSub()
MessageBox.Show("我是CallBack")
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim t As New Thread(AddressOf ThreadMethod)
t.Start("传参")
lbl1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
End Sub
Private Delegate Sub myDelegate(ByVal myString As String) '自定义一个委托
Dim MyThread As System.Threading.Thread
Private Sub SetWindowText(ByVal myString As String) '与委托相同签名的函数或过程
Me.Text = myString
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MyThread = New System.Threading.Thread(AddressOf sum)
MyThread.Start()
End Sub
Private Sub sum()
Dim sum As Single
sum = Rnd()
Me.BeginInvoke(New myDelegate(AddressOf SetWindowText), sum.ToString)
End Sub