资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

vb点虐 线程托管 vbnet线程池

VB.NET中的多线程和委托是什么关系? 能不能给我一个通俗易懂的范例,谢谢

委托,Delegate

创新互联为企业级客户提高一站式互联网+设计服务,主要包括网站建设、成都网站制作、重庆APP开发公司微信小程序开发、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。 

就是让你处于这个线程里时,委托另一个线程去执行一些动作

我简单举一个写richtextbox的例子:

////////////////////////////////////////////

'创建一个名为 MySubDelegate 的委托。

Delegate Sub MySubDelegate(ByVal txt As String)

'写信息到富文本主窗口

Private Sub txtW(ByVal txt As String)

Dim msgd As New MySubDelegate(AddressOf Me.txtW1)

Dim arg(0) As Object

arg(0) = txt

Me.Invoke(msgd, arg)

End Sub

'委托指向

Private Sub txtW1(ByVal txt As String)

Me.RichTextBox1.AppendText(txt)

End Sub

/////////////////////

这样,你在多线程应用时,在其他线程里用txtW(str)来写richtextbox,就不会产生错误了。不然,直接垮线程写richtextbox,可能会出现和UI线程的冲突。

vb点虐 线程托管 窗口假死

Me.Invoke(d, i)

问题出在这里!

直接用Me.Invoke把实际的执行任务提交给主线程运行

所以你的处理函数实际上是在主线程中运行的,新线程等于没用

正确的作法是,定义一个函数为入口的线程,并启动它

在需要调用的时候再使用Invoke来调用委托来进行更改。

----------------------------------------------------------------

方法已经给你说明白了,新建1个线程和2个线程来操作有什么不通用的哪??

问题不是线程个数的问题,是你线程中的函数一直在调用settext和settext1两个函数,而这两个函数都是处于method 方法 的while的循环中,相当于不间歇的在使用 Me.Invoke(d, i)这个方法。

----------------------------------------------------------------

如果你要不停地通过另外一个线程修改richtextbox内的内容,那也可以新启动一个线程,由这个线程的入口方法创建一个richtextbox ,再由这个线程来对这个richtextbox 进行操作。当然,你也可以用不安全的线程间的操作方法来实现。

VB.NET 的 后台线程(主线程)如何让它所属的主线程执行一个方法或事件(可以再附加分)

其实最简单的方法是设置一个全局的变量,然后加一个timer,不停显示最新的变量值

关于vb点虐 多线程和委托问题

Delegate Sub MySubDelegate(form As Form1)

Class class1

Sub Sub1(form As Form1)

form.Timer1.Enabled = True

form.Label1.Visible = True

MsgBox("kkk")

End Sub

End Class

Private Sub DelegateTest()

Dim c1 As New class1

Dim msd As MySubDelegate = AddressOf c1.Sub1

Me.Invoke(msd,Me)

End Sub


当前文章:vb点虐 线程托管 vbnet线程池
文章地址:http://cdkjz.cn/article/ddgddeo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220