私は次のテストコードを持っています。何の役にも立ちませんが、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
フォームはaButton
と。で構成されLabel
ます。
学習目的のために、別のスレッドのラベルのテキストを変更するメソッドを配置しました。ただし、InvokeRequired
値は戻り続けFalse
ます。これはどのように可能ですか?はLabel1
メインスレッドで作成され、runThreadで調整されているためInvokeRequired
、Trueが得られるはずです。
ここで、これはフォームのハンドルがまだ作成されていないときに発生することを読んだので、Run
メソッドを変更しました。
Public Sub Run()
Sandbox.Show()
runToggle(1000)
End Sub
これは問題を解決しません。