HOW TO:存取應用程式的所有開啟表單
更新:2007 年 11 月
這個範例會使用 My.Application.OpenForms 屬性 (Property),顯示所有應用程式之開啟表單的標題。
不論是由哪個執行緒開啟表單,My.Application.OpenForms 屬性都會傳回所有目前開啟的表單。這表示您應該在存取表單之前,檢查每個表單的 InvokeRequired 屬性,否則會擲回 InvalidOperationException 例外狀況。
這個範例會宣告以安全執行緒方法取得每個表單標題的函式。首先,會檢查表單的 InvokeRequired 屬性,然後視需要使用 BeginInvoke 方法,執行表單執行緒上的函式。然後,該函式會傳回表單的標題。
範例
這個範例會對應用程式的開啟表單執行迴圈,並在 ListBox 控制項中顯示表單的標題。如需只顯示從目前執行緒直接存取之表單的簡易程式碼,請參閱 My.Application.OpenForms 屬性。
Private Sub GetOpenFormTitles()
Dim formTitles As New Collection
Try
For Each f As Form In My.Application.OpenForms
' Use a thread-safe method to get all form titles.
formTitles.Add(GetFormTitle(f))
Next
Catch ex As Exception
formTitles.Add("Error: " & ex.Message)
End Try
Form1.ListBox1.DataSource = formTitles
End Sub
Private Delegate Function GetFormTitleDelegate(ByVal f As Form) As String
Private Function GetFormTitle(ByVal f As Form) As String
' Check if the form can be accessed from the current thread.
If Not f.InvokeRequired Then
' Access the form directly.
Return f.Text
Else
' Marshal to the thread that owns the form.
Dim del As GetFormTitleDelegate = AddressOf GetFormTitle
Dim param As Object() = {f}
Dim result As System.IAsyncResult = f.BeginInvoke(del, param)
' Give the form's thread a chance process function.
System.Threading.Thread.Sleep(10)
' Check the result.
If result.IsCompleted Then
' Get the function's return value.
Return "Different thread: " & f.EndInvoke(result).ToString
Else
Return "Unresponsive thread"
End If
End If
End Function
請參閱
工作
HOW TO:進行對 Windows Form 控制項的安全執行緒呼叫