vb點虐 中如何結束一個線程
在錦江等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都做網(wǎng)站、網(wǎng)站建設 網(wǎng)站設計制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站建設,成都營銷網(wǎng)站建設,成都外貿網(wǎng)站建設,錦江網(wǎng)站建設費用合理。
一般而言,如果您想終止一個線程,您可以使用System.Threading.Thread類的Abort方法. 例如:
Dim worker As ThreadStart = New ThreadStart(AddressOf workerthreadmethod)
Dim t As Thread = New Thread(worker)
t.Start()
MessageBox.Show("Wait for a while for the thread to start.")
MessageBox.Show(t.ThreadState.ToString())
t.Abort()
MessageBox.Show(t.ThreadState.ToString())
t.Join()
MessageBox.Show(t.ThreadState.ToString())
當然,在調用Abort方法后,線程并不是立刻終止,要等線程的所有finally快中的代碼完成后才會完全終止. 所以在主線程中可以用Join方法來同步,當線程還未完全終止時,t.Join()將處于等待,直到t線程完全結束后再繼續(xù)執(zhí)行后面的語句。
Abort方法是會導致線程跳出一個異常錯誤的,你需要在代碼中捕獲該異常。下面是一個比較完整的VB.NET線程告咐扒例子:
Imports System
Imports System.Threading
Public Class MyTestApp
Public Shared Sub Main()
Dim t As New Thread(New ThreadStart(AddressOf MyThreadMethod))
'Start the thread
t.Start()
MsgBox("Are you ready to kill the thread?")
'Kill the child thread and this will cause the thread raise an exception
t.Abort()
' Wait for the thread to exit
t.Join()
MsgBox("The secondary thread has terminated.")
End Sub
Shared Sub MyThreadMethod()
Dim i As Integer
Try
Do While True
Thread.CurrentThread.Sleep(1000)
Console.WriteLine("This is the secondary thread running.")
Loop
Catch e As ThreadAbortException
MsgBox("This thread is going to be terminated by the Abort method in the Main function")
End Try
End Sub
End Class
Thread.Abort()方法用來永久銷毀一個線程,而且將拋出ThreadAbortException異常。使終結的線程可以捕獲到異常但是很難控制恢復,僅有的辦法是調用Thread.ResetAbort()來取消剛才的襪昌簡答調用,而且只有當這個異常是由于被調用線程引起的異常。因此,A線程可以正確的使用Thread.Abort()方法作用于B線程,但是B線程卻不能調用Thread.ResetAbort()來取消Thread.Abort()操作。
VB NET(Visual Basic NET)是為適應Microsoft NET框架的需要 對Visual Basic進行了重大改造后的開發(fā)工具 它比Visual Basic 功能更強大 更易于使用 其中最重要的變化就是對象繼承 在VB NET中 所有可管理的類型都衍生自System Object 作為編程工具 最重要的一個特性就是垃圾碎片的回收 它由CLR(Common Language Runtime)進行控制 并提供更好的內存管理功能 通用的類型定義可以提供更好的互操作性和協(xié)同工作能力 因此 VB NET顯得更強大 更具可靠性 在VB NET中 大多數(shù)CLR內建的類型都在System名字空間里已經(jīng)定義了 比如 System Object System Int 和 System String 要注意的是 一個名字空間可能嵌在另一個名字空間內 象System Data里就有System Data DataSet的類 代表是CLR編程模型很重要的一個新概念 代表是一個特殊類型的可管理的類 當你創(chuàng)建一個代表的實例時 你必須提供一個帶有匹配簽名的方法執(zhí)行的地址 一旦創(chuàng)建了一個代表的實例 調用方法將變的很容易 過去 我們利用VB開發(fā)多線程的應用程序時 是一件很令人痛苦的事 經(jīng)常是多線程的程序運行是會變成多錯誤的程序!但在VB NET中 這種狀況已經(jīng)大為改觀 現(xiàn)在 我們利用VB NET處理多線程和利用JAVA處理多線程一樣簡單了 下面我們就舉個例子 來看看VB NET的多線程吧!下面是多線程程序threadtest vb的代碼 imports Systemimports System Threadingpublic class AClasspublic sub Method ()Dim i as integerFor i = to Console Writeline( 這是類AClass方法method 的內容 i)nextend subpublic sub Method ()Dim i as integerFor i = to Console Writeline( 這是類AClass方法method 的內容 i)橘態(tài)指nextend subend classpublic class ThreadTestpublic shared sub Main()dim obj as new aclassdim th th as thread閉棚th =new Thread(new ThreadStart(addressof thod ))th startth =new Thread(new ThreadStart(addressof thod ))th startdim i as integerFor i= to Console WriteLine( Main方法里的內容 i)Nextend subend class現(xiàn)在 來讓我們剖析一下上面的例子 我們創(chuàng)建了我們自己的類AClass 并創(chuàng)建了兩個方法 Method 和Method 這兩個方法很簡單 只有一個For循環(huán) 向輸出設備輸出一些信息 我們還定義了另外一個類ThreadTest來使用上面創(chuàng)建的類AClass 在Main()方法中 我們創(chuàng)建了類Thread的實例 類Thread可以在System Threading名字空間里得到 它定義了處理線程的屬性和方法 在類Thread的構造器中 我們使用了類ThreadStart 類ThreadStart是一個代表 標志著當一個線程開始時就開始執(zhí)行定義的方法 為了執(zhí)行定義的方法 我們實際調用的是線程的Start()方法 用VBC來編譯上面的程序 vbc /out:threadtest exe threadtest vb 運行編譯后的程序 我們將會看到我們定義的兩個方法和main()方法的混合輸出 這就說明每一個方法都在自己的線程下運行 除圓配了上面的方法 線程還有下面常用的方法 Stop():停止線程的運行 Suspend() 暫停線程的運行 Resume() 繼續(xù)線程的運行 Sleep() 停止線程一段時間(單位為毫秒) lishixinzhi/Article/program/net/201311/11287
Public?Class?Form1
Public?Class?SquareClass?'把多線程調用的函數(shù)封裝到類中,通過類事件返回
Public?Value?As?Double
Public?Square?As?Double
Public?Event?ThreadComplete(ByVal?Square?As?Double)
派螞????Public?Sub?CalcSquare()
Square?=?Value?*?Value
RaiseEvent?ThreadComplete(Square)
End?Sub
End?Class
Dim?WithEvents?oSquare?As?SquareClass
困銷??Private?Sub?Button1_Click(sender?As?Object,?e?As?EventArgs)?Handles?Button1.Click?'多線程返回值測試,當線程運行完成激發(fā)事件
oSquare?=?New?SquareClass()
塵尺埋??????Dim?t?As?New?Threading.Thread(AddressOf?oSquare.CalcSquare)
oSquare.Value?=?30
t.Start()
End?Sub
Sub?SquareEventHandler(ByVal?Square?As?Double)?Handles?oSquare.ThreadComplete?'響應事件函數(shù)
MsgBox("The?square?is?"??Square)
End?Sub
End?Class
網(wǎng)站欄目:vb點虐
線程實例的簡單介紹
URL網(wǎng)址:http://jinyejixie.com/article10/ddpiego.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、小程序開發(fā)、手機網(wǎng)站建設、網(wǎng)站營銷、靜態(tài)網(wǎng)站、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)