版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

在有些时候需要主动终止某个线程,这时可以调用Thread.Abort方法。
例如以下的代码:

使用到的类:

Class clsSum2Public inputNum As IntegerPublic currentNum As IntegerPublic outputSum As Integer
End Class
主线程代码:Sub sample9()Dim maxNum As Integer = 20Dim sumNumber As New clsSum2sumNumber.inputNum = maxNumDim sample9_Thread As New Thread(AddressOf sample9_getSum)sample9_Thread.Start(sumNumber)Do Until sumNumber.currentNum >= 10Thread.Sleep(100)Loopsample9_Thread.Abort()Console.WriteLine("终止时运行到:{0},和为:{1}", sumNumber.currentNum, sumNumber.outputSum)Console.ReadKey()End SubSub sample9_getSum(ByVal obj As Object)Dim testSum As New clsSum2testSum = CType(obj, clsSum2)Dim sum As Integer = 0For i As Integer = 0 To testSum.inputNumsum += itestSum.currentNum = iThread.Sleep(100)NexttestSum.outputSum = sumEnd Sub

原本我们希望当子线程中循环求和计算到10时就停止并vb.net教程输出和值,但是实际常常得到的结果是:

或者

也就是说,根本没有运行到testSum.outputSum=sum,这就需要随时保存outputSum的值。
修改后的代码如下:

Sub sample9()Dim maxNum As Integer = 20Dim sumNumber As New clsSum2sumNumber.inputNum = maxNumDim sample9_Thread As New Thread(AddressOf sample9_getSum)sample9_Thread.Start(sumNumber)Do Until sumNumber.currentNum >= 10Thread.Sleep(100)Loopsample9_Thread.Abort()Console.WriteLine("终止时运行到:{0},和为:{1}", sumNumber.currentNum, sumNumber.outputSum)Console.ReadKey()
End SubSub sample9_getSum(ByVal obj As Object)Dim testSum As New clsSum2testSum = CType(obj, clsSum2)Dim sum As Integer = 0For i As Integer = 0 To testSum.inputNumsum += itestSum.currentNum = iThread.Sleep(100)testSum.outputSum = sumNext
End Sub

运行结果:

或者主线程大意了,放子线程多运行了一次循环:

这个例子说明了些问题:
1、线程其实并不好控制,需要多练习
2、将输出值放到了循环内部,每次循环都运行一次,实际占用了资源

在下一节将讲述如何更好的控制线程的终止。

vb.net 教程 6-14 终止线程的例子相关推荐

  1. android 如何终止线程

    今天,简单讲讲如何终止线程. Android终止线程的方法 线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象.但 ...

  2. java终止线程的三种方法

    有三种方法可以使终止线程. 1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止. 2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend.resum ...

  3. 终止线程的三种方法(转)

    有三种方法可以使终止线程. 1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止. 2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend.resum ...

  4. java thread exit方法_实例分析Java终止线程和stop()方法

    Java终止线程实例和stop()方法源码阅读 了解线程 概念 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 线程特点 拥有状态,表示线程的状态,同一时刻中,JVM中 ...

  5. vb.net 教程 20-4 库存管理系统3.14 出库单操作(FormStorageOutOrder)

    版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的.   关于<Visual Basic.Net 循序渐进>请到百度网盘下载,具体下载地址 ...

  6. 全国计算机二级vb 文库,全国计算机等级考试二级VB基础教程电子教案.ppt

    全国计算机等级考试二级VB基础教程电子教案.ppt ,Visual Basic程序设计基础教程 电子教案,制作人曾强聪,2004 年 4 月,课程内容,第 1 章,第 2 章,第 3 章,第 4 章, ...

  7. C#多线程之旅(七)——终止线程

    阅读目录 一.什么时候用Thread.Abort(); 二.Thread.Abort的用法 三.无法终止线程的情形 四.Catch块中抛出异常 五.Finally块中抛出异常 六.Abort调用的时间 ...

  8. 开课吧课堂:详解挂起、恢复和终止线程

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  9. vb程序设计教程第4版龚沛曾 实验答案解析

    这里只是个人对书中题目的解答,并不代表最优代码.仅供参考.有哪里错误或者不足的地方还望指出,Thanks♪(・ω・)ノ 以及 不要脸地 求探讨求点赞.嘿嘿 这里使用的是<vb程序设计教程(第四版 ...

  10. 【多线程编程学习笔记6】终止线程执行,千万别踩这个坑!

    申明:本学习笔记是在该教程的基础上结合自己的学习情况进行的总结,不是原创,想要看原版的请看C语言中文网的多线程编程(C语言+Linux),该网站有很多好的编程学习教程,尤其是关于C语言的. 在< ...

最新文章

  1. Python的DataFrame多个条件过滤错误
  2. python基础知识~ 等值判断和码
  3. 微信小程序实时将less编译为wxss
  4. 带宽测量:带宽测量工具下载
  5. mysql协议重传,MySQL · 源码分析 · 网络通信模块浅析
  6. solr 7 mysql导入_solr 7.7.0 windows 导入mysql数据库数据
  7. mysql 视图 教程_MySQL视图简介及基本操作教程
  8. 函数名,函数体,返回值,参数
  9. python 获取当前月份月初日期和月末日期
  10. [洛谷P3346][ZJOI2015]诸神眷顾的幻想乡
  11. Python制作一个科学计算器
  12. html5 绘制思维导图,Qunee组件制作思维导图
  13. antd使用TimePicker时报错
  14. Android BottomNavigationView的使用
  15. 浅谈Marlin2.0
  16. [转帖]《魔兽世界》的成功之道
  17. 第十一周OJ-Q50解题方法
  18. 利用Calendar简洁制作万年历
  19. 在keil中看内存地址
  20. 关于c/c++里面结构体指针变量的申请空间问题。

热门文章

  1. eplan p8详细安装步骤文库_eplan p8详细安装步骤
  2. Linux 如何生成文件的MD5值(md5sum)?
  3. 基于信息论的特征选择算法综述
  4. 数论在计算机科学中的应用,近世代数思想方法在数论中的应用
  5. cad怎么查找未闭合_CAD有个工具(命令)是清除没有闭合的图形是哪个
  6. OS实验xv6 6.S081 开坑
  7. 【预测模型】基于天牛须算法优化ELman神经网络实现数据预测matlab代码
  8. AlterID.exe解决teamview商业使用
  9. 如何将Eclipse设置为中文版
  10. 360安全卫士清理C盘