【线程委托】关于vb.net最简单的线程委托

苦苦的潜行者 2011-10-19 05:10:12
先上代码

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyThread As New System.Threading.Thread(AddressOf sum)
MyThread.Start()
End Sub
Private Sub sum()
Dim i, sum As Integer
For i = 0 To 100
sum += i
Next
Me.Text = CStr(sum) '在这里就会报错,教我"如何跨线程调用windows窗体控件",表示没看懂
End Sub
End Class

我是新手,希望能够在我代码基础上直接修改,以便我能够看懂0.0
有高手指点如何在这个地方创建委托,使得此线程能够安全的调用窗体控件呢,谢谢喽.
...全文
572 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ououpp 2013-03-01
  • 打赏
  • 举报
回复
所谓的方法签名,是指一个方法的返回值类型及其参数列表的类型
ououpp 2013-03-01
  • 打赏
  • 举报
回复
Private Delegate Sub myDelegate(ByVal myString As String) '自定义一个委托 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 Dim MyThread As New System.Threading.Thread(AddressOf sum) MyThread.Start() End Sub Private Sub sum() Dim i, sum As Integer For i = 0 To 100 sum += i Next Me.Invoke(New myDelegate(AddressOf SetWindowText), sum.ToString) '委托的调用 End Sub
苦苦的潜行者 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cyf4 的回复:]

将Me.Text = CStr(sum)改为Me.Invoke(Sub() Me.Text = CStr(sum))就行
[/Quote]

提示说sub()应为表达式...
怎么办啊....
cyf4 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaolinyouni 的回复:]

引用 3 楼 cyf4 的回复:

将Me.Text = CStr(sum)改为Me.Invoke(Sub() Me.Text = CStr(sum))就行


提示说sub()应为表达式...
怎么办啊....
[/Quote]
我用vs2010,所以可以用lambda表达式,同样你也可以定义一个Delegate做委托,稍微显得复杂点而已
苦苦的潜行者 2011-10-20
  • 打赏
  • 举报
回复
我居然发现5楼

http://blog.csdn.net/haoting987
该博客可能未开通或者违反了网站规则被关闭


你居然还神奇的活着...牛X
苦苦的潜行者 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 haoting987 的回复:]

Private Delegate Sub myDelegate(ByVal myString As String) '自定义一个委托

Private Sub SetWindowText(ByVal myString As String) '与委托相同签名的函数或过程
Me.Text = myString
End Sub

Privat……
[/Quote]

嗯,可以,太兴奋了.谢谢大婶.
积善成魔 2011-10-20
  • 打赏
  • 举报
回复
Private Delegate Sub myDelegate(ByVal myString As String) '自定义一个委托

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
Dim MyThread As New System.Threading.Thread(AddressOf sum)
MyThread.Start()
End Sub

Private Sub sum()
Dim i, sum As Integer
For i = 0 To 100
sum += i
Next
Me.Invoke(New myDelegate(AddressOf SetWindowText), sum.ToString) '委托的调用
End Sub
cyf4 2011-10-19
  • 打赏
  • 举报
回复
将Me.Text = CStr(sum)改为Me.Invoke(Sub() Me.Text = CStr(sum))就行
苦苦的潜行者 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wxg22526451 的回复:]

线程里改控件值
C# code
this.Invoke((ThreadStart)delegate()
{
This.Text =sum.ToString();
});
[/Quote]

霸气的C#....你杀了我吧!
wxg22526451 2011-10-19
  • 打赏
  • 举报
回复
线程里改控件值
 this.Invoke((ThreadStart)delegate()
{
This.Text =sum.ToString();
});

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧