首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB.Net 知识要点:(4) 错误处理和多线程

2012-08-24 
VB.Net 知识要点:(4) 异常处理和多线程一、异常处理?1.语法错误2.Run-Time错误3.逻辑错误异常处理机制Try?.

VB.Net 知识要点:(4) 异常处理和多线程

一、异常处理

?

1.语法错误
2.Run-Time错误
3.逻辑错误
异常处理机制
Try
?...
Catch ex As 异常处理类
?...
Finally
?...
End Try

?

异常处理类
ApplicationException?发生非关键性应用程序错误时所返回的异常情况
ArgumentException?当其中一个提供给方法的自变量为无效时所返回的异常情况
ArgumentNullException?由不允许自变量为Null的方法返回的异常情况
ArgumentOutOfRangeException?由验证自变量超出指定范围内的方法返回的异常情况
DirectoryNotFoundException?找不到文件或目录的一部分时所返回的异常情况
DivideByZeroException?尝试将整数或小数值除以零时所返回的异常情况
EndOfStreamException?尝试超过数据流末端进行读取时所返回的异常情况
Exception??所有异常情况的基底类
ExternalException?发生所有以Runtime外部环境为目标的异常情况的基底类
FileNotFoundException?尝试访问不存在于磁盘上的文件失败时所返回的异常情况
IndexOutOfRangeException?当数组索引不正确时,由Runtime返回的异常情况
InvalidCastException?无效的数据类型(Casting)或明确转换所返回的异常情况
InvalidOperationException?当方法调用对对象的目前状态是无效时所返回的异常情况
NullReferenceException?当参考Null对象时,由Runtime返回
OutOfMemoryException?当没有足够的内存继续运行程序时,所返回的异常情况
StackOverflowException?当运行堆栈因为具有过多暂停方法调用而溢出时所返回的异常情况
SystemException??所有Runtime所产生错误基底类

?

抛出异常
Throw new InvalidCastException


二、多线程


Imports System.threading
Module Module1
?Sub Main()
??'显示线程的编码
??Console.WriteLine(Thread.CurrentThread.GetHashCode)
??while(True)
???'显示一个随机数
???Console.Write(Int(Rnd()*42)+1&" ")
???'线程停止一秒钟
???Thread.CurrentThread.Sleep(1000)
??End While
??Console.ReadLine()
?End Sub
End Module

?

?

创建多线程
第一种
在创建多线程之前,必须先创建一个新对象,以便赋值给线程来负责运行
Dim m1 As New game_machine("game")
Dim t1 As New System.Threading.Thread(AddressOf m1.generate_number)
game是类名称,m1是对象名称,设置起始程序为generate_number方法
启动线程
t1.Start()
第二种
Dim t1=New game_machine2()
t1.startup()
Public Class game_machine2
?private thread1 As Thread
?Public Sub startup()
??Dim threadx As TRhreadStart
??threadx=New ThreadStart(AddressOf Me.Start)
??thread1=New Thread(threadx)
??thread1.start()
?End Sub
?Private Sub Start()
??...
?End Sub
End Class

?

查看线程状态
使用ThreadState属性可以了解每一个线程的状态
Aborted??线程在Stopped状态
AbortRequested?Abort方法已在线程上被调用,但线程还没有收到尝试终结它的暂停
Background?线程正作为背景线程运行中
Running??线程已经启动,并未受封锁,也没有暂停
Stopped??线程已经停止
StopRequested?线程正被要求停止中
Suspended?线程已经暂停
SuspendRequested?线程正被要求暂停中
Unstarted Thread.Start?方法还没有在线程上被调用
WaitSleepJoin?线程因为调用Wait、Sleep或Join而被封锁

?

线程属性
ApartmentState?取得或设置线程为单一线程(STA)或多线程(MTA)状态
IsAlive??目前线程的运行状态
IsBackground?取得或设置线程是否为背景线程
IsThreadPoolThread?取得线程是否属于Managed线程集区
ThreadState?取得线程的状态

?

线程方法
Abort??退出线程
AllocaeDataSlot?在所有的线程上分配未命名的数据位置
AllocateNamedDataSlot?在所有的线程上分配命名的数据位置
GetData??从目前线程指定位置捕获数值
Interuupt?中断在WaitSleepJoin线程状态的线程
Join??封锁调用线程,直到线程退出为止
ResetAbort?取消目前线程要求的Abort
Resume??使暂停的线程继续
SetData??在目前运行的线程上的指定位置中设置数据
Sleep??在指定的毫秒数内封锁目前的线程
Start??将目前运行个体的状态变更为ThreadState.Running
Suspend??将线程暂停,或者如果线程已经暂停,则没有影响

?

线程优先权
Priority属性可以设置线程的优先权,其权值优先级如下:
Highest > AboveNormal > Normal > BelowNormal > Lowest
优先权值高的线程将占用较多的CPU资源,而优先权值低的线程必须等待其他较高权值的线程运行后才会轮到使用CPU资源。

?

线程调度
创建两个线程对象,如果希望第一个线程运行完成,再运行第二个线程,则可以使用Join方法实现
t1.Start()
t1.Join()
t2.Start()
t2.Join()

?

线程同步
使用Mutex对象的WaitOne方法和ReleaseMutex方法,可以限制同一时间只能有一个线程对象运行该方法,其他想要运行这个方法的线程必须等到此方法空闲时才能开始运行。
Private Shared mut1 As New Mutex
mut1.WaitOne()
...
mut1.ReleaseMutex

?

线程间沟通
Monitor.Wait()?让线程进入等待状态
Monitor.Pulse()?唤醒第一个进入等待状态的线程
Monitor.PulseAll()?唤醒所有等待状态的线程

热点排行