VB.NET的Me.Invoke为何看似未调用?线程在执行中为何暂停?

2026-05-06 09:322阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

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

VB.NET的Me.Invoke为何看似未调用?线程在执行中为何暂停?

我有以下代码段:vbPublic Delegate Sub SetStatusBarTextDelegate(ByVal StatusText As String)Private Sub SetStatusBarText(ByVal StatusText As String) If Me.InvokeRequired Then Me.Invoke(New SetStatusBarTextDelegate(AddressOf SetStatusBarText)) Else ' 设置状态栏文本的代码 End IfEnd Sub

我有以下代码:

VB.NET的Me.Invoke为何看似未调用?线程在执行中为何暂停?

Public Delegate Sub SetStatusBarTextDelegate(ByVal StatusText As String) Private Sub SetStatusBarText(ByVal StatusText As String) If Me.InvokeRequired Then Me.Invoke(New SetStatusBarTextDelegate(AddressOf SetStatusBarText), StatusText) Else Me.labelScanningProgress.Text = StatusText End If End Sub

问题是,当我从另一个线程调用“SetStatusBarText”子时,InvokeRequired为True(应该是),但是然后我的线程在Me.Invoke语句中停止 – 暂停执行显示它们只是坐在那里,而不是实际调用任何东西.

关于为什么线程似乎害怕Invoke的任何想法?

Invoke方法在消息队列中放入一条消息,以在主线程中执行方法调用.这意味着您需要一个带消息泵的主线程.如果主线程忙,或者如果您在没有消息泵的应用程序(例如控制台应用程序)中执行此操作,则该消息将保留在队列中.

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

VB.NET的Me.Invoke为何看似未调用?线程在执行中为何暂停?

我有以下代码段:vbPublic Delegate Sub SetStatusBarTextDelegate(ByVal StatusText As String)Private Sub SetStatusBarText(ByVal StatusText As String) If Me.InvokeRequired Then Me.Invoke(New SetStatusBarTextDelegate(AddressOf SetStatusBarText)) Else ' 设置状态栏文本的代码 End IfEnd Sub

我有以下代码:

VB.NET的Me.Invoke为何看似未调用?线程在执行中为何暂停?

Public Delegate Sub SetStatusBarTextDelegate(ByVal StatusText As String) Private Sub SetStatusBarText(ByVal StatusText As String) If Me.InvokeRequired Then Me.Invoke(New SetStatusBarTextDelegate(AddressOf SetStatusBarText), StatusText) Else Me.labelScanningProgress.Text = StatusText End If End Sub

问题是,当我从另一个线程调用“SetStatusBarText”子时,InvokeRequired为True(应该是),但是然后我的线程在Me.Invoke语句中停止 – 暂停执行显示它们只是坐在那里,而不是实际调用任何东西.

关于为什么线程似乎害怕Invoke的任何想法?

Invoke方法在消息队列中放入一条消息,以在主线程中执行方法调用.这意味着您需要一个带消息泵的主线程.如果主线程忙,或者如果您在没有消息泵的应用程序(例如控制台应用程序)中执行此操作,则该消息将保留在队列中.