我已經知道模塊級變量的值不會被改變,直到改變它的子程序退出。vb.net子程序沒有更新模塊級別的變量,直到退出sub
StopBackgroundWorker1 = True
Thread.Sleep(1500)
If BackgroundWorker1Complete = False Then
Exit Sub
End If
在這個例子中,我加了一個長時間的測試。我只是試圖停止並開始安全地使用vb 2017新背景工人類的後臺工作。
上面的例子中帶有「StopBackgroundWorker1 = True」的例子,我希望在安全的地方阻止工作人員,然後在其他代碼中繼續使用該子工作。
但是,發生的事情是,「StopBackgroundWorker1 = True」沒有被設置爲「True」,直到子退出。
必須有另一種方式做我想做的事,請大家幫忙
確定這裏是一個完整的例子,
Imports System.ComponentModel
Imports System.Threading
Public Class Form1
Private flag As Boolean = False
Dim Completed As Boolean = False
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
flag = True
'Do
' do loop never see's a true flag
'Loop Until Completed
Thread.Sleep(500)
If Completed = True Then
Label1.BackColor = Color.Red
End If
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Do
Thread.Sleep(25)
Loop Until flag
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As
RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Completed = True
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles
Button2.Click
Label1.Text = flag.ToString
End Sub
End Class
現在的概念是,如果你打Button1的等待背景工人要完成,它應該變成紅色。但事實並非如此。執行循環尋找一個真正的國旗將旋轉永遠鎖定形式。
我已經確定這個例子,標誌沒有設置爲true,直到你退出子。再次點擊Button1,lable1變成紅色。
在此先感謝您的任何答案。
您在哪個級別聲明變量'StopBackgroundWorker1'? –
你有一些誤解。首先,VB 2017沒有新的BackgroundWorker類。 'BackgroundWorker'已經可用於.NET 2.0以來的所有.NET語言,這與VB 2005的發佈一致。 – jmcilhinney
其次,您不會啓動和停止'BackgroundWorker'。你調用'RunWorkerAsync'方法和'BackgroundWorker'只是引發一個事件。該事件由您的表單處理,「DoWork」事件處理程序是表單的一部分,而不是「BackgroundWorker」。 – jmcilhinney