InvokeRequired一直当真正有望返回false(InvokeRequired keeps

2019-09-17 11:35发布

我有以下的测试代码。 它没有任何用处,但它的存在,我听不懂VB:

Imports System
Imports System.IO
Imports System.Diagnostics
Imports Microsoft.VisualBasic
Imports System.Threading

Public Class Sandbox
    Public Shared num As NumericUpDown

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objWrk As Worker
        objWrk = New Worker
        objWrk.Show()
    End Sub
End Class

Public Class Worker
    Public Sub Show()
        Dim runThread As New System.Threading.Thread(AddressOf Run)      ' Call the runner in a seperate thread
        runThread.Start()
    End Sub

    Public Sub Run()
        runToggle(1000)
    End Sub

    Public Delegate Sub runToggleInvoker(ByVal value As Integer)
    Public Sub runToggle(ByVal value As Integer)
        If Sandbox.Label1.InvokeRequired = True Then
            Sandbox.Label1.Invoke(New runToggleInvoker(AddressOf runToggle), value)
        Else
            Sandbox.Label1.Text = value
        End If
    End Sub
End Class

该表格包含一个的ButtonLabel

只是为了学习的目的,我已经把改变在另一个线程在标签的文本方法。 然而, InvokeRequired值保持返回False 。 这怎么可能? 该Label1是在主线程创建的,它是在runThread进行调整,因此InvokeRequired应该给真。

在这里我看到这种情况的发生,当窗体的手柄,使我改变了我尚未创建Run方式:

Public Sub Run()
            Sandbox.Show()
            runToggle(1000)
        End Sub

这并不解决问题。

Answer 1:

据Control.InvokeRequired物业

如果控件的句柄尚不存在,InvokeRequired,直到找到确实有窗口句柄控件或窗体向上搜索控件的父链。 如果能找到合适的句柄,InvokeRequired方法返回false。



文章来源: InvokeRequired keeps returning false when true is expected