vbnet线程委托 vbnet timer多线程

关于VB.NET中多线程和委托界面假死无响应的问题

并没有看出什么地方可能导致程序假死,这排版也太乱了.不妨调试一下程序,当出现你说的"假死"后暂停一下程序,看看线程都卡在哪里.

创新互联建站-专业网站定制、快速模板网站建设、高性价比密云网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式密云网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖密云地区。费用合理售后完善,十载实体公司更值得信赖。

另外,从设计上来看,你这里并不需要多线程操作.

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

委托,Delegate

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

我简单举一个写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.net 多线程和委托问题

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.net 线程托管 窗口假死

Me.Invoke(d, i)

问题出在这里!

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

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

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

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

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

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

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

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

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


当前文章:vbnet线程委托 vbnet timer多线程
网站URL:http://azwzsj.com/article/doscdhi.html