У меня есть простая «рабочая» форма, которая запускается в своем собственном потоке, чтобы держать пользователя в курсе, что приложение не умерло во время длительных операций.Чтобы получить рабочую форму для обновления, мне пришлось вставить вызов 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