【发布时间】:2017-05-04 09:53:54
【问题描述】:
我是多线程和后台工作者的新手。 我试图根据教程和论坛主题编写一个简单的测试,但它没有按我的预期工作。
我有一个带有Button1、Label1、BackgroundWorker1 控件的 Windows 窗体应用程序。
当我点击按钮时,我想这样做:
- Backgroundworker 持续检查变量
stateTrue 或 False - 首先将标签文本更改为 False(第一次状态 = false)
- 如果
state在主线程中设置为True,则将标签文本更改为True(当“Sample process”(For Next)结束时state设置为True)
我的代码是:
Public state As Boolean
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Debug.Print("Button1_Click ThreadID - " & Thread.CurrentThread.ManagedThreadId)
state = False
BackgroundWorker1.RunWorkerAsync()
'--Sample process in the main thread
For c = 0 To 10000
Debug.Print(c)
Next
state = True
End Sub
Dim c As Integer
Public Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
setlabel(state.ToString)
Do While state = False
Debug.Print("BackgroundWorker1_DoWork ThreadID - " & Thread.CurrentThread.ManagedThreadId & " - state: " & state)
Thread.Sleep(100)
Loop
setlabel(state.ToString)
End Sub
Public Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Debug.Print("BackgroundWorker1_RunWorkerCompleted - State: " & state)
End Sub
Sub setlabel(text As String)
Label1.Invoke(Sub()
Label1.Text = text
End Sub)
End Sub
我的问题是:
- 标签的文本在开头不会更改为 False
BackgroundWorker1_DoWork - 在
Do While中没有Debug.Print
输出是:
Button1_Click ThreadID - 9 0 1 2 ... 9998 9999 10000 BackgroundWorker1_RunWorkerCompleted - State: True
我做错了什么?
【问题讨论】:
标签: vb.net multithreading backgroundworker