如何使用vb.net多线程

2023-05-16

可能一些小程序用不上,单线程就可以完成,但是很多程序往往需要多个线程同时操作,或者用辅助线程来完成主线程的工作,    多线程对于一个程序员来说是一个必须逾越的槛。最近在写一个程序,设备要同时登陆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
        MsgBox(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

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

在创建的线程内不能访问控件,那怎么办了,下面就要说到通过委托访问控件
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) '执行指定的委托,将n传进去
            System.Threading.Thread.Sleep(10) '让它走慢一点
        Next
    End Sub
’增加一个过程
    Sub txt(ByVal i As Int32)
        TextBox1.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后,可以看到textbox1的数字狂飙,而我们还可以做其它事,也不会出现无响应的情况,以上只是一个应用多线程的一个小示例

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用vb.net多线程 的相关文章

随机推荐

  • 解决aria2下载磁力链接或bt文件时没有速度或速度为0

    使用aria2下载磁力链接和种子时 xff0c 发现长时间都没有速度 xff0c 因为默认的配置是没有加tracker列表的 xff0c 就像迅雷没有p2p共享一样 xff0c 所以要在配置文件中加入trackers xff0c 速度就会提
  • UDP 打洞 java demo

    UDP打洞的具体原理就不细说了文章还是很多 xff0c 说下我的网络环境 xff0c 家里台式电脑网线连的家里路由器 移动宽带 xff0c 公司台式电脑网线连的公司路由器 电信宽带 xff0c 一台有公网IP的华为云主机 xff08 我是试
  • 云服务器内存不够,设置swap交换分区

    购买了一台阿里的云服务器1核2G的 xff0c 装上docker后 xff0c 运行了十几个容器后面的容器就再也没法启动了 xff0c 一看物理内存为0 xff0c 加内存又没钱 xff0c 只能牺牲速度了 xff0c 阿里云的服务器默认是
  • sql 拼接一列数据为一个字段

    最近有个功能中需要把一列数据拼接成一个字段的需要 xff0c 本以为concat 轻松就能实现 xff0c 结果却差点意思 xff0c 这个是拼接一行之间的 xff0c group concat 需要分组才能拼接组内的一列数据 xff0c
  • idea反编译

    idea有自带的反编译插件java decompiler jar xff0c 默认是安装的 这个工具包在F Program Files JetBrains IntelliJ IDEA 2020 2 3 plugins java decomp
  • android远程协助

    一部手机有时候需要远程协助另一台手机如QQ的远程协助一样 xff0c 准备两个手机 下面用AB代替 1 A手机 xff08 需要被协助的手机 xff09 开启开发者选项 xff0c usb连接电脑 xff0c 命令开启ADB xff08 手
  • 阿里云服务器安装图形界面

    为了自动化流程安装图形界面 xff0c 我的服务器是Centos7 1 yum安装gnome图形界面 yum groupinstall GNOME Desktop y 2 安装远程桌面服务端 yum y install tigervnc s
  • 国网 内网U盘 服务未启动 驱动版本不符问题

    国网内网U盘问题处理 1 提示服务未启动 是因为Bios开启了Secure BOOT xff0c 将这个选项设置为disable就可以 xff0c 进入Bios这个选项有的主板在Boot选项下 xff0c 有的在Security选项下 xf
  • 【C++】面试题目,整理自牛客网

    来源 1 写出完整版的strcpy函数 char strcpy char strDest const char strSrc assert strDest 61 NULL amp amp strSrc 61 NULL char addres
  • 卡尔曼滤波

    系列文章目录 前言 一 线性高斯系统 二 卡尔曼滤波算法 1 卡尔曼滤波算法的应用 2 卡尔曼滤波的数学推导 1 预测部分的推导 2 观测部分的推导 前言 最近在阅读概率机器人这本书 xff0c 读到了卡尔曼滤波的相关内容 xff0c 想要
  • xcode升级到6.2,解决了simulator国际化无法获取中文的问题

    问题描述 xff1a http blog csdn net aileenyuxiao article details 42704917 xcode最近升级到6 2 xff0c 这个bug也一起解决了 xff0c 只需要修改simulator
  • 利用OOQP求解二次凸优化问题

    最近使用到了OOQP求解凸优化问题 xff0c 所以记录一下求解简单的二次凸优化问题 目录 一 OOQP安装 二 OOQP相关介绍 三 例题 1 数学例题 2 代码求解 3 求解结果 总结 一 OOQP安装 参考了浙大高飞老师团队提供的 O
  • 一、pixhawk 开发之 QGroundControl 安装

    提示 xff1a 地面站 xff08 QGroundControl xff09 安装 一 注意事项 1 There are known video steaming issues on Ubuntu 18 04 systems with d
  • git bash可以正常commit,但是 VSCode 里不能正常commit使用的解决方法

    问题描述 同一路径下的源码 xff0c 使用git bash可以正常commit xff0c 但是使用vscode提交commit就会一直卡住 xff0c 转圈圈 参考方案链接 xff1a VS CODE GIT 500 问题处理 pudn
  • Windows和Linux双系统安装教程

    最近刚刚完成了Windows和Linux双系统 xff08 这里以Ubuntu安装为例 xff09 的安装 xff0c 应某奔同学要求 xff0c 这里简单记录下安装过程 系统启动盘准备Windows系统安装分出给Linux系统的磁盘空间安
  • Level5#Unit1#Part1#Dialogue#A-Customer-Complaint

    Is this the ACE service center Yes it is sir May I help you Yes I 39 m calling to complain about your service Certainly
  • Level5#Unit1#Part2#Listening#At-Jessica’s-Reunion-Party1

    Jessica 39 s 20 year classreunion was held at a fancy hotel When she arrived she wasn 39 t sure she was in the right pla
  • Level5#Unit2#Part1#Dialogue#The-Teenage-Years

    What 39 s so funny What are you writing about I 39 m writing about something I saw earlier this morning Really Do you ke
  • nginx环境wordpress 固定链接实现…

    开始几次设置wordpress的固定链接都没成功 xff0c 今天做松子价格网时不甘心 xff0c 试了几次OK了 其实nginx环境下设置wordpress固定链接 xff08 也叫伪静态 xff09 非常简单 xff08 我是用的是wo
  • 如何使用vb.net多线程

    可能一些小程序用不上 xff0c 单线程就可以完成 xff0c 但是很多程序往往需要多个线程同时操作 xff0c 或者用辅助线程来完成主线程的工作 xff0c 多线程对于一个程序员来说是一个必须逾越的槛 最近在写一个程序 xff0c 设备要