VBNET线程和委托20191223
1、每个程序有一个主线程,如果一个循环处于主线程中,程序在较长的循环,将出现“不响应”的情况。
线程在System.Threading中。线程创建可专用于一个功能块(方法、函数), 线程的开始用Start方法,线程的结束用Abort方法,线程的暂停使用Sleep方法
2、委托的思想,就是自己不能干或不想干的事,委托另一个有能力或有权限的人去干那件事。
实际上,我们一直要用委托思想,比如基本类型的变量名。Dim i As Integer
除了变量名可以用委托一样,方法(sub)也可以用委托,这就是我们普通所说的委托。
定义和使用大致与变量名的方式一样:
(1)定义委托类型: Private Delegate Sub VoidShow(ByRef i As Int32) '参数多种,多个)
(2)定义要赋的具体“值”(要做的事情和方法): 这里的具体值,不是值,而是一个具体的方法,方法的形式必须与上面定义保持一致。就象变量名是整形时,赋值也应该是整形,而不是String. 例如:Private Sub TureShowNumber(ByRef i As Int32) '方法名自定,但形式与(1)保持一致。
(3)调用这个值: 也就是委托去办事。用Invoke方法:Control.Invoke(New MyDelegate(AddressOf TureShowNumber), intValue)
Imports System.Threading Public Class Form1 Dim mythread As Thread Private Delegate Sub VoidShow(ByRef i As Int32) '定义要委托的类型 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click mythread = New Thread(AddressOf ShowNumber) '构造线程 mythread.Name = "myShowNumber" mythread.Start() '启动线程 mythread.Sleep(5000) '启动线程 End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click TextBox2.Text = "终于出现奇迹" End Sub Private Sub ShowNumber() Dim i As Int32 For i = 0 To 123451 ' TextBox1.Text = i Me.Invoke(New VoidShow(AddressOf TureShowNumber), i) '用New构造委托,再用Invoke执行 Next mythread.Abort() '终止线程 End Sub Private Sub TureShowNumber(ByRef i As Int32) '新加入的被委托要做的事 TextBox1.Text = i End Sub End Class
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决