如何使用vb.net多线程

如何使用vb.net多线程,第1张

概述可能一些小程序用不上,单线程就可以完成,但是很多程序往往需要多个线程同时 *** 作,或者用辅助线程来完成主线程的工作,    多线程对于一个程序员来说是一个必须逾越的槛。最近在写一个程序,设备要同时登陆3台设备,如果使用单线程排队完成,时效性就达不到要求,应次没办法必须要学习多线程,那么如何使用vb.net多线程呢?下面是我百度搜索的一片多线程使用实例,先参考: 线程的基本 *** 作 Dim Td As Sy

可能一些小程序用不上,单线程就可以完成,但是很多程序往往需要多个线程同时 *** 作,或者用辅助线程来完成主线程的工作, 多线程对于一个程序员来说是一个必须逾越的槛。最近在写一个程序,设备要同时登陆3台设备,如果使用单线程排队完成,时效性就达不到要求,应次没办法必须要学习多线程,那么如何使用vb.net多线程呢?下面是我百度搜索的一片多线程使用实例,先参考:

线程的基本 *** 作

Dim Td As System.Threading.Thread '定义一个线程
Td = New System.Threading.Thread(AddressOf abc) '实例化(abc是个过程不能带参数,启动线程后就在一个单独的线程内执行abc过程)
Td.Start() '开始运行线程
System.Threading.Thread.Sleep(500) '延时500毫秒
Td.Abort() '中止线程

现在我们来试试多线程如何使用
Dim Td As System.Threading.Thread '定义一个线程
Dim n As Int32

Private Sub button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles button1.Click
Td = New System.Threading.Thread(AddressOf abc) '实例化,指向abc过程
Td.Start() '开始运行线程
End Sub
Sub abc()
For n = 0 To 100000000
System.Threading.Thread.Sleep(10) '让它走慢一点
Next
End Sub
Private Sub button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles button2.Click
Msg@R_419_6951@(n) '可以看到n在变
End Sub
可以看到在执行abc这个过程时,程序并没有失去响应,这就是多线程的一个优势
哎 忘了关闭线程了,在我们关闭窗口后,这个线程没运行完的话,还会继续走
Private Sub Form1_FormClosed(ByVal sender As Object,ByVal e As System.windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Td.Abort() '结束线程
End Sub

下面我们改一改,加个text@R_419_6951@显示n
Sub abc()
For n = 0 To 100000000
Text@R_419_6951@1.Text = n
System.Threading.Thread.Sleep(10) '让它走慢一点
Next
End Sub
它会报错:
线程间 *** 作无效: 从不是创建控件“Text@R_419_6951@1”的线程访问它。

在创建的线程内不能访问控件,那怎么办了,下面就要说到通过委托访问控件
Delegate Sub Dg(ByVal v As Int32) '声明一个委托,根据你委托的过程写,还有函数形式的,delegate function Dg(byval v as int32) as int32
Dim Dg_txt As New Dg(AddressOf txt) '定义,实例化一个委托,指向txt这个过程(这个过程可以带参数)
Me.Invoke(Dg_txt,n) '执行指定的委托,n是txt过程需要的参数

以下是具体使用
把委托声明放外面,完整代码如下:
Public Class Form1
Dim Td As System.Threading.Thread '定义一个线程
Dim n As Int32
Delegate Sub Dg(ByVal v As Int32) '声明一个委托

‘abc过程改下:
Sub abc()
Dim Dg_txt As New Dg(AddressOf txt) '定义,指向txt这个过程
For n as integer = 0 To 100000000
Me.Invoke(Dg_txt,将n传进去
System.Threading.Thread.Sleep(10) '让它走慢一点
Next
End Sub
’增加一个过程
Sub txt(ByVal i As Int32)
Text@R_419_6951@1.Text = i
End Sub

Private Sub button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles button1.Click
Td = New System.Threading.Thread(AddressOf abc) '实例化,指向abc过程
Td.Start() '开始运行线程
End Sub

点button1后,可以看到text@R_419_6951@1的数字狂飙,而我们还可以做其它事,也不会出现无响应的情况,以上只是一个应用多线程的一个小示例

最后说下委托的这个过程txt,它的运行依然是占用原始线程的,你在这个过程内放个大循环,或者sleep,就会看到程序失去响应 所以除了关键的涉及到控件的,其它的运算都尽量放在Td线程指向的过程abc内,才能发挥多线程的优点

总结

以上是内存溢出为你收集整理的如何使用vb.net多线程全部内容,希望文章能够帮你解决如何使用vb.net多线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存