VB.NET中DoEvents是否仅对当前线程事件处理有影响?

2026-05-06 12:051阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计425个文字,预计阅读时间需要2分钟。

VB.NET中DoEvents是否仅对当前线程事件处理有影响?

我有这样一个简单的工作表单,它在自己的线程上运行,以确保用户的应用程序在长时间运行期间不会崩溃。为了更新工作表单,我必须添加一个DoEvents()调用。真神奇,这只会让我的当前线程继续运行。

我有一个简单的“工作”表单,它在自己的线程上运行,以通知用户应用程序在长时间运行期间没有死亡.为了使工作表单更新,我必须插入一个DoEvents()调用.

我很好奇,这只会为我当前的线程输入消息,还是会为整个应用程序执行此操作?我希望主窗口保持无响应直到操作完成,所以我很好奇这个行为.以下是工作表单的代码.

为了清楚起见,我对我的代码很好,但我想知道DoEvents()如何与线程一起运行.

VB.NET中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更新它.

本文共计425个文字,预计阅读时间需要2分钟。

VB.NET中DoEvents是否仅对当前线程事件处理有影响?

我有这样一个简单的工作表单,它在自己的线程上运行,以确保用户的应用程序在长时间运行期间不会崩溃。为了更新工作表单,我必须添加一个DoEvents()调用。真神奇,这只会让我的当前线程继续运行。

我有一个简单的“工作”表单,它在自己的线程上运行,以通知用户应用程序在长时间运行期间没有死亡.为了使工作表单更新,我必须插入一个DoEvents()调用.

我很好奇,这只会为我当前的线程输入消息,还是会为整个应用程序执行此操作?我希望主窗口保持无响应直到操作完成,所以我很好奇这个行为.以下是工作表单的代码.

为了清楚起见,我对我的代码很好,但我想知道DoEvents()如何与线程一起运行.

VB.NET中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更新它.