十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首先,你把你那些要运行很久的过程。尽量放在一个过程中。
创新互联专业为企业提供梅县网站建设、梅县做网站、梅县网站设计、梅县网站制作等企业网站建设、网页设计与制作、梅县企业网站模板建站服务,十余年梅县做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
因为线程只能是过程,不能使函数,没有返回值的。
然后,在某个事件下这样写:
**这里我假设你的那个很就的过程叫做 sub aaa()
调用如下:
Dim mythread As New System.Threading.Thread(AddressOf aaa)
mythread.Start()
***********
这样就是定义一个线程,名字叫 mythread,这个线程会运行aaa这个过程。
start 就是让线程运行。
定义:
Dim g_ReceiveThread As System.Threading.Thread
创建:
g_ReceiveThread = New System.Threading.Thread(AddressOf ReceiveProc)
开始:
g_ReceiveThread.Start()
结束:
Dim waitStart As Long = My.Computer.Clock.TickCount + 1000 ‘超时
While (g_ReceiveThread.ThreadState System.Threading.ThreadState.Stopped)
If My.Computer.Clock.TickCount = waitStart Then
g_ReceiveThread.Abort()
End If
Application.DoEvents()
End While
这个没法做到。原因
1)当你将方法排入线程池队列后,此方法在有线程池线程变得可用时执行。
2)线程池中某个线程的可用与不可用,是由.net 后台决定,用户程序无法控制的
3)正如你观察到的:线程启动的时间不同,有快有慢,这恰恰说明线程池起作用了:线程池的调度试图让程序响应达到最佳。
你真心无聊。
多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。
主线程只是通知系统,请启动一个线程运行某某函数。
而哪个线程先运行完全在系统决定。甚至可能主线程执行到Thread1.Abort() ,Thread2.Abort()的时候这两个线程都还没有启动起来,所以你会遇到两个变量都是空值这种情况。
委托,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线程的冲突。
简单回答:
1、当前来说,编程与运行环境合适的情况下,VB.net与VB都有实现多线程的可能。
2、VB、VB.net的最基本的概念,是调用系统的接口进行编程,只要系统提供“多线程”的功能调用,它们就能实现多线程。
3、VB注意于面向用户,面向任务,其高级的一些程序实现需要直接调用win的API,VB实现多线程的例子也可以在网络上搜索到。
一、关于VB、VB.net的相关知识:
1、编程指的是用人类能理解的语言来编写指令集,并通过专用的编译软件或环境来转化这些指令,使得这些指令能让计算机识别,从而控制计算机做人类需要进行的工作。
2、也就是说无论是VB.NET还是VB它们都只是“人类能理解的语言”,它们通过专用的编译软件或环境来转化这些指令,进而操作电脑。
3、进一步特化到VB上去说。VB基于VB的运行库,它的运行库又基于win的API((Application Programming Interface,应用程序编程接口)是一些预先定义的函数),也就是说,VB的很多(多到90%以上)的功能是直接基于调用windows提供的一些基本接口函数。
4、VB.net有什么不同呢,它基于.net运行库。什么 意思?这个意思就是,微软发现win的API不够用了,不好用了,就打算在windows上加装点东西,让它有更多的接口函数。但要注意的是,多数情况下,这些接口比win的API的效率要低一些。在win7及以后的版本的win中,已经自含了.net运行库。
5、顺便说,为什么很多人会发现win7的运行速度看起来要比xp慢呢,个人认为就是因为调用的是.net的接口来实现的,.net就是比API的慢。当然了,.net的功能上要比xp原有的API的功能强。
6、VB与VB.net在语法上是非常近似的,只是因为Visual Studio的版本不同,后期的Visual Studio已不提供简纯的VB了,注意它们的不同主要是后台核心调用的理念上的不同。