独自のスレッドで実行される単純な「作業中」フォームがあり、長時間実行されている操作中にアプリケーションが停止していないことをユーザーに通知します。作業フォームを更新するには、DoEvents()
呼び出しを挿入する必要がありました。
私は興味があります、これは私がいる現在のスレッドのメッセージだけをポンピングしますか、それともアプリケーション全体に対してそれを行いますか?操作が終了するまでメインウィンドウが応答しないようにしたいので、動作に興味があります。以下は、作業フォームのコードです。
明確にするために、私は自分が持っているコードで問題ありませんが、DoEvents()
スレッドでどのように動作するかを知りたいです。
Public Class frmWorking
''' <summary>
''' Creates and starts a new thread to handle the Working Dialog
''' </summary>
''' <returns>The thread of the Working dialog.</returns>
''' <remarks></remarks>
Public Shared Function StartWait() As WorkingFromToken
Dim th As New Threading.Thread(AddressOf ShowWait)
Dim token As New WorkingFromToken
th.Start(token)
Return token
End Function
Private Shared Sub ShowWait(token As WorkingFromToken)
Dim frm As New frmWorking
Try
frm.Show()
Do
If frm.txtWait.Text.Length > 45 Then
frm.txtWait.Text = "Working"
Else
frm.txtWait.Text &= "."
End If
Windows.Forms.Application.DoEvents()
Threading.Thread.Sleep(250)
Loop While token.Running
frm.Hide()
Catch ex As Threading.ThreadAbortException
Threading.Thread.ResetAbort()
frm.Hide()
Return
End Try
End Sub
End Class