checkerThread = new Thread(new ThreadStart(() => CheckTokens()));
checkerThread.Start();
// Re-enable controls when done
stopCheckButton.Visible = false;
stopCheckButton.Enabled = false;
startCheckButton.Enabled = true;
loadTokenListButton.Enabled = true;
exportTokensButton.Enabled = true;
clearCheckButton.Enabled = true;
clearValidButton.Enabled = true;
tokenInputBox.Enabled = true;
当线程运行时,我的表单中的控件被禁用。我想在线程完成后重新启用它们。如果不通过 thread.Join()
阻止 UI,我将如何做到这一点?
答案 0 :(得分:0)
我建议考虑使用 BackgroundWorker
示例代码:
这是另一个例子:
<块引用>https://www.dotnetperls.com/backgroundworker-vbnet
public Class Form1
Public Class ArgumentType
Public _a As Int32
Public _b As Int32
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Create the argument object.
Dim args As ArgumentType = New ArgumentType()
args._a = 5
args._b = 6
' Start up the BackgroundWorker1.
' ... Pass argument object to it.
BackgroundWorker1.RunWorkerAsync(args)
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork
' Do some time-consuming work on this thread.
System.Threading.Thread.Sleep(1000)
' Get argument.
Dim args As ArgumentType = e.Argument
' Return value based on the argument.
e.Result = args._a * args._b
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted
' Called when the BackgroundWorker is completed.
MessageBox.Show(e.Result.ToString())
End Sub
End Class