しばらくの間、私はこのコードを使用しています:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim t2 As New Threading.Thread(AddressOf SetLabelText2)
t2.IsBackground = True
t2.Start()
End Sub
Delegate Sub UpdateDelegate()
Private Sub SetLabelText2()
If InvokeRequired Then
Invoke(New UpdateDelegate(AddressOf SetLabelText2))
Else
For i = 1 To 110
Label2.Text = Text
Threading.Thread.Sleep(200)
Next
End If
End Sub
このコードは正常に動作しますが、アプリケーションをマルチスレッド化せず、応答しない状態にします。
私の質問は簡単です、1.これを修正するにはどうすればよいですか
If InvokeRequired Then
Invoke(New UpdateDelegate(AddressOf SetLabelText2))
Else
FunctionCall1()
FunctionCall2()
FunctionCall3()
End If
それらはすべて機能し、UI スレッドを取得します。
私はかなり長い間探していましたが、助けていただければ幸いです。
-編集- また、フォームから情報を読み取るためにスレッド内で問題が発生しています... :) これまでの助けに感謝します
編集 - -
OK、コードを次のように変更しました
Delegate Sub setForm1PrgBarPerformStepdelegate(s As Integer)
Private Sub setForm1PrgBarPerformStep(ByVal s As Integer)
If Form1.ProgressBar1.InvokeRequired Then
Dim d As New setForm1lblAlltextdelegate(AddressOf setForm1PrgBarPerformStep)
Form1.Invoke(d, New Object() {s})
Else
If s = 1 Then
Form1.ProgressBar1.PerformStep()
Else
End If
End If
End Sub
このコードは setForm1PrgBarPerformStep(1) ' または 0 で呼び出されています
ウィッチは私のスレッドによって呼び出されます (それは機能します (スレッド部分 - 魔女は素晴らしいところで)、実行ステップを実行しないという小さな欠陥があります - またはその他の UI の変更はプライベート サブ setForm1PrgBarPerformStep() でコーディングします)
これには正当な理由がありますか?