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