我有一个简单的“工作”表单,它在自己的线程上运行,让用户知道应用程序在长时间运行的操作中没有死机。为了让工作表格更新,我必须插入一个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