私は2つのフォームを持つプロジェクトを持っています。 Form1とform2。 Form1のコードについてはVB.NETの他のフォームでスレッドのlabel.textを変更する方法
は次のとおりです。Form2ので
Public Class Form1
Dim thread As System.Threading.Thread
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Form2.Show()
End Sub
Private Sub countup(ByVal startFrom As Integer)
For startFrom = startFrom To startFrom + 10000
startFrom += 1
Form2.Label1.Text = startFrom
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
thread = New System.Threading.Thread(AddressOf countup)
thread.Start(1000)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
thread.Abort()
End Sub
End Class
私はLABEL1という名前のラベルのみ。 私はForm1で開始されたスレッドからForm2のlabel1.textを更新する必要があります。 プログラムはエラーなく実行されますが、何も起こりません。 form2のLabel1.textは変更されません。 これを行う方法は?事前に おかげ
[** Control.Invoke()**を使用して、スレッドセーフな呼び出しを実行する](https://stackoverflow.com/documentation/vb.net/1913/threading/6235/perform-thread-safe-calls-using-control-invoke#t = 201706240759182674836) - この場合、Me.Invoke()および_ ** not ** _' Form2.Label1を呼び出す必要があります.Invoke() 'これは、フォームのデフォルトインスタンスにアクセスすると、現在のスレッド(この場合は実際のUIスレッドではなくバックグラウンドスレッド)で作成された新しいインスタンスにアクセスするためです。 –
申し訳ありませんが、わかりません。 Label1はForm1にはなく、Form2には... – SomeOneMore
UIスレッド内にある限り、どこにコントロールを呼び出すかは関係ありません。私のリンクをチェックし、 'LogTextBox.Invoke'の代わりに' Me.Invoke'を書いてください( 'LogTextBox.InvokeRequired'と同じです)。残りの情報はリンクにありますが、ご質問がありましたらお気軽にお問い合わせください。 –