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
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
建立新的執行緒
建立執行緒最直接的方法就是建立執行緒類別的一個新執行個體,並且使用 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
訂閱:
文章 (Atom)