gpt4 book ai didi

vb.net - DoEvents 是否只影响当前线程?

转载 作者:行者123 更新时间:2023-11-30 23:49:14 25 4
gpt4 key购买 nike

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

最佳答案

DoEvents只会泵出当前的 UI 线程。

但是,我不推荐您的方法。

相反,您应该在后台线程上完成工作,并在 UI 线程上显示模式进度表并使用 BeginInvoke 更新它。或 BackgroundWorker .

关于vb.net - DoEvents 是否只影响当前线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6267001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com