在此,我们仅以GetAvailableThreads为例:
当 GetAvailableThreads 返回时,workerThreads 指定的变量包含可以启动的其他辅助线程的数目,而 completionPortThreads 指定的变量包含可以启动的其他异步 I/O 线程的数目
代码如下:
Imports System
Imports System.Threading
Imports System.Runtime.InteropServices
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
Dim jg As Long = 0
Public Class TaskInfo
Public Handle As RegisteredWaitHandle = Nothing
Public OtherInfo As String = "default"
Public ev As AutoResetEvent
End Class
<MTAThread()> _
Sub Main()
'定义AutoResetEvent和RegisteredWaitHandle对象
Dim myHandle As RegisteredWaitHandle = Nothing
Dim ti As New TaskInfo()
ti.ev = New AutoResetEvent(False)
ti.OtherInfo = "deepfuture test"
'注册等待,等待线程的任务就是定时取计算结果,如果没有计算完成,就继续等待
ti.Handle = ThreadPool.RegisterWaitForSingleObject( _
ti.ev, _
New WaitOrTimerCallback(AddressOf mythreadrun), _
ti, _
100, _
False _
)
Console.Write("{0},开始执行线程,主线程{1}正在计算结果", Now.ToLongTimeString, Thread.CurrentThread.ManagedThreadId)
'等待并执行其它代码
For mynum = 1 To 100
jg += mynum
Thread.Sleep(10)
Console.WriteLine("主线程{0}正在运行.....当前计算结果为{1}", Now.ToLongTimeString, jg)
Next
Console.WriteLine("主线程 " & Now.ToLongTimeString & "线程计算完毕!")
'设置为终止状态,触发回调
ti.ev.Set()
Thread.Sleep(20)
End Sub
Public Sub mythreadrun(ByVal state As Object, ByVal timedOut As Boolean)
'本线程的任务是的计算完成后显示结果,没计算完成时,做其它工作,
'在这里其他工作就是显示一个"."
Dim ti As TaskInfo = CType(state, TaskInfo)
Dim workerThreads As Integer
Dim portThreads As Integer
If timedOut Then
'时间到,仍没计算完毕,为非终止状态
Console.WriteLine("等待时间到,计算没有完毕,继续等待...")
ThreadPool.GetAvailableThreads(workerThreads, portThreads)
Console.WriteLine("目前可以启动的工作线程的数目{0},目前可以启动的异步IO线程的数目{1}", workerThreads, portThreads)
Else
If Not ti.Handle Is Nothing Then
'已经终止
ti.Handle.Unregister(Nothing)
End If
Console.WriteLine("主线程{0}运行完成.....读取最终计算结果为{1}", Now.ToLongTimeString, jg)
End If
End Sub
End Module
- 大小: 99 KB
分享到:
相关推荐
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
vb.net2010数据库编程基础教程-数据绑定,使用控件方式连接数据库,图文教程
VB.NET多线程编程技术--大量提高应用程序的性能[收集].pdf
VB.NET判断网络连接状态
VB.NET应用教程第2版-童爱红-数据包 书本内的全部代码!
用VB.NET写的小计算器,之前看到一个,不过发现那个BUG挺多的,就自己写了一个,呵呵,仅供参考。打开里面的Caculate.vbproj文件,即可看到源代码。
使用VB.NET对PLC进行读写数据,方便快捷,对入门者有很好的编程
第8章-VB.NET与数据库应用程序10-10-25
AUTOCAD VBA&VB.NET开发基础与实例教程 c#
VB.net设计模式高级编程这本书的源码,网上已经找不到,特发出来共享。
AUTOCAD VBA&VB.NET开发基础与实例教程 c#
VB.NET实例解析应用编程 VB.NET实例解析应用编程 VB.NET实例解析应用编程
Developers guide to ASP.NET
第二部分 vb.net的语法部分 第三部分 visual basic.net的运算 第四部分 visual basic.net的常用控件 第六部分 vb.net的OOP结构 第七部分 数据库访问技术 第八部分 vb.net的多线程 第九部分 vb.net的文件和出错处理
VB.NET之SerialPort编程实例源码 直接使用
vb.net控件应用编程实例教程vb.net控件应用编程实例教程vb.net控件应用编程实例教程
VB.NET高级篇教程
vb.net(2008) 写的Keyence Laser LK-G5000数据读取。
vb.net和sol server2000高级编程-创建高效数据层
VB.net上位机与三菱 FX3U-ENET-L(ADP)模块以太网MC协议通信源码及设置,以太网模块IP地址设为192.168.0.254,开启三菱编程软件上下载端口,VB.用MC ASCII协议读取D0-D5并显示出来