VB.NET中的多線程開發

來源:互聯網
上載者:User
多線程

引言

  對於使用VB6的開發人員而言,要在程式中實現多線程(multi-thread)功能,一般就是使用Win32 API調用。但凡是進行過這種嘗試的開發人員都會感覺到實現過程非常困難,而且總是會發生些null terminated strings GPF的錯誤。可是有了VB.NET,一切煩惱都成為過去。

  自由線程(free threaded)

  在VB6中,我們只能對組件設定多線程模式,這通常就是單元模式的多線程。對於Apartment 執行緒元件而言,組件中的每個可執行方法都將在一個和組件相聯絡的線程上運行。這樣,我們就可以通過建立新的組件執行個體,使得每個執行個體都有一個相應的線程單元,從而達到每個正在啟動並執行組件都有它自己的線程,多個組件可以在各自的單元中同時運行方法。

  但是如果在程式的Session或Application控制範圍內,我們不會使用Apartment 執行緒元件,最佳的也是唯一的選擇是自由執行緒元件。可是僅僅有VB6還不行,我們需要VC++或Java的協助。

  現在好了,VB.NET改善了這些功能,.NET SDK中包含的System.Threading名字空間專門負責實現多線程功能,而且操作相當簡單:只需要利用System.Threading名字空間中的Thread類,就具有了實現自由線程的屬性和方法。
 

一個建立自由線程的例子解析

  我們來看看下面的VB.NET代碼,它示範了實現自由線程的過程:

 

Imports System
’ Import the threading namespace
Imports System.Threading

Public Class clsMultiThreading
’ This is a simple method that runs a loop 5 times
’ This method is the one called by the HelloWorldThreadingInVB
’ class, on a separate thread.
  Public Sub OwnThread()
  Dim intCounter as integer
  For intCounter = 1 to 5
   Console.WriteLine("Inside the class: " & intCounter.ToString())
  Next
 End Sub
End Class

Public Class HelloWorldThreadingInVB
 ’ This method is executed when this EXE is run
 Public Shared Sub Main() Dim intCounter as integer
  ’ Declare an instance of the class clsMultithreading object
  Dim objMT as clsMultiThreading = new clsMultiThreading()


  ’ Declare an instance of the Thread object. This class
  ’ resides in the System.Threading namespace
  Dim objNewThread as Thread


  ’Create a New Thread with the Thread Class and pass
  ’ the address of OwnThread method of clsMultiThreading class
  objNewThread = new Thread(new ThreadStart(AddressOf objMT.OwnThread))


  ’ Start a new Thread. This basically calls the OwnThread
  ’ method within the clsMultiThreading class
  ’ It is important to know that this method is called on another
  ’ Thread, as you will see from the output
  objNewThread.Start()


  ’ Run a loop and display count
  For intCounter = 10 to 15
   Console.WriteLine("Inside the Sub Main: " & intCounter.ToString())
  Next
 End Sub
End Class 

 代碼的開始是引入名字空間System和System.Threading,然後建立一個公用類clsMultiThreading。類clsMultiThreading中包含一個公用方法OwnThread,它執行了5次for迴圈,每次顯示資訊到螢幕。建立這個類的目的是為了以單獨線程的方式從其他類中調用OwnThread方法。

  接著,我們建立另外一個類HelloWorldThreadingInVB,它包含一個方法Main。當最終產生的可執行檔運行時,Main將啟動。在方法Main中,我們建立了一個clsMultiThreading類的執行個體,這樣就能調用它的方法OwnThread了。

  現在,我們通過傳遞方法OwnThread的地址的方式來建立線程類執行個體,實際上這就等於建立了一個新的線程,並且告知線程當它運行時要執行的方法。我們使用函數AddressOf 擷取方法OwnThread的地址,然後將之傳遞到ThreadStart代表類。

  然後,我們調用Thread類的Start方法啟動了這個新類。新類按照自己的方式開始運行,不再需要依賴建立它的類。

  編 譯

  我們將上面的代碼儲存為檔案Thread.VB,然後將之進行編譯:

  

vbc.exe Thread.vb /t:exe /debug /cls


  編譯成功後,將建立可執行檔Thread.Exe。運行Thread.Exe,我們會得到下面的結果:

 


  請注意:來自clsMultiThreading 類和HellWorldThreadinginVB 類的輸出資訊並不是同步的。這就表明,當執行objNewThread.Start()命令的同時,一個新線程也啟動了,並且執行了那個新線程中的OwnThread方法。2個線程是並列啟動並執行,現象就是顯示資訊數字1到5不是在一起,其中穿插了來自main線程的輸出資訊。

  結 語

  以上就是在VB.NET中建立多線程應用的過程。你會感到這是多麼的簡單,但同時實現了非常強大的功能。使用多線程功能,我們可以建立更好的商業和資料層組件,並且,憑藉我們的想像力,將之發揮到更好。

 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。