Protected 修飾詞可用於以下內容中

Protected : 指定一或多個已宣告的程式設計項目只可從自己的類別或從衍生類別中進行存取

Class 陳述式
宣告類別的名稱,並引入組成類別的變數、屬性 (Property)、事件和程序的定義


Const 陳述式
宣告並定義一或多個常數

Declare 陳述式
宣告在外部檔案中所實作之程序的參考

Delegate 陳述式
用來宣告委派 (Delegate)。委派是一種參考型別,它參考型別的 Shared 方法或物件的執行個體方法 (Instance Method)。任何具有相符參數型別和傳回型別的程序都可用來建立這個委派類別的執行個體。接著可透過委派執行個體來叫用程序

Dim 陳述式
為一或多個變數宣告和配置儲存空間

Enum 陳述式
宣告列舉型別並定義其成員值

Event 陳述式
宣告使用者定義事件

function 陳述式
宣告用於定義 Function 程序的名稱、參數和程式碼

Interface 陳述式
宣告介面的名稱並引入組成介面之成員的定義

Property 陳述式
宣告屬性 (Property) 的名稱以及用來儲存和擷取屬性值的屬性程序

Structure 陳述式
宣告結構的名稱,並引入組成結構之變數、屬性 (Property)、事件和程序的定義

Sub 陳述式
宣告定義 Sub 程序的名稱、參數和程式碼

property,get,set 语句祥解

property


   get

   End Get

   Set

   End Set

End property
 
property....End property里面设置属性

get...End Get是读取属性值,比如读取textbox.text
set...End set是设置属性值,比如设置textbox.readonly=true



因是因為, 這是兩個不同的Form1類別執行個體.




比方說你把程式改為這樣



Public Class Class1

Public Shared Sub ThreadProcSafe()

Form1.SetText("This text was set safely.")

Form1.ShowDialog()

End Sub

End Class



你就會發現預期的效果其實是出現在另外一個Form1. 而非原本的Form1



如果你要正確的結果, 就必須將原來的Form1執行個體傳遞給這個靜態方法:



ex:



Public Class Form1

Delegate Sub SetTextCallback(ByVal [text] As String)



Public demoThread As Thread = Nothing



Public Sub SetText(ByVal [text] As String)



If Me.TextBox1.InvokeRequired Then

Dim d As New SetTextCallback(AddressOf SetText)

Me.Invoke(d, New Object() {[text]})

Else

Me.TextBox1.Text = [text]

End If

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Class1._mainForm = Me

Me.demoThread = New Thread(New ThreadStart(AddressOf Class1.ThreadProcSafe))

Me.demoThread.Start()

End Sub



End Class



Public Class Class1

Private Shared m_mainForm As Form1



Public Shared Property _mainForm As Form1

Get

Return m_mainForm

End Get

Set(ByVal value As Form1)

m_mainForm = value

End Set

End Property

Public Shared Sub ThreadProcSafe()

_mainForm.SetText("This text was set safely.")

End Sub

End Class

使用 Visual Basic .NET 的多執行緒程式開發

http://www.microsoft.com/taiwan/msdn/library/2002/Apr-2002/whitepaper/vbtchAsyncProcVB.htm

建立新的執行緒

建立執行緒最直接的方法就是建立執行緒類別的一個新執行個體,並且使用 AddressOf 陳述式傳遞您要執行之程序的委派。例如,下列程式碼會將名為 SomeTask 的子程序當成另一個執行緒執行。

Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask)

Thread1.Start

' 此處的程式碼會立即執行。


執行緒共用


執行緒共用是多執行緒的一種形式,工作會加入佇列中,並在建立執行緒時自動啟動。使用執行緒共用時,您要呼叫 Threadpool.QueueUserWorkItem 方法,使用您要執行之程序的委派,Visual Basic .NET 會建立執行緒並執行您的程序。以下範例顯示可以如何使用執行緒共用啟動許多工作。

Sub DoWork()

Dim TPool As System.Threading.ThreadPool

' 佇列工作

TPool.QueueUserWorkItem(New System.Threading.WaitCallback _

(AddressOf SomeLongTask))

' 佇列另一個工作

TPool.QueueUserWorkItem(New System.Threading.WaitCallback _

(AddressOf AnotherLongTask))

End Sub



有一點要釐清的:Join 是一個同步或封鎖呼叫。您呼叫了 Join 或等候處理常式的等候方法後,呼叫程序會停止,等候執行緒通知其已經完成。


Sub JoinThreads()

Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask)

Thread1.Start()

Thread1.Join() ' 等候執行緒完成。

MsgBox("執行緒已經完成")

End Sub