在VB.Net我創建了一個似乎工作的後臺工作。它是建立這樣的:vb.net - 我如何修復與後臺工作者的交叉
Private bw As BackgroundWorker = New BackgroundWorker
Public Sub construct_configure()
bw.WorkerReportsProgress = True
bw.WorkerSupportsCancellation = True
AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
end sub
然後我有的doWork小組成立這樣的:
Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
' create the picture box
pic_holder = New PictureBox()
' Show GIF and disable whatever you need to
With pic_holder
.Image = My.Resources.counter_gif
.Size = New Size(200, 100)
.Location = New Point(0, 0)
.Visible = True
.BackColor = Color.Red
End With
Main.Controls.Add(pic_holder)
pic_holder.BringToFront()
MessageBox.Show("worker started")
End Sub
消息框顯示出來,當我在我的按鈕,點擊呼叫分,但動畫GIF永遠不會。我試圖簡單地設置一個指標,說明有一些後臺工作正在進行。當我將它設置在父分支中時,gif顯示出來。
此外,我想將gif放置在已存在的面板中,但每次嘗試時,都會發生交叉線程錯誤,該錯誤說明該面板是在另一個線程中創建的。我該如何解決這個問題?
謝謝。
這是一個Windows應用程序或WCF嗎? WCF有一種方法可以使用Dispatcher輕鬆地從GUI控件的線程調用方法...可用的方法取決於您的應用程序的技術。 – ps2goat
您通過不使用BGW修復它。當代碼需要幾微秒時,完全沒有意義。 –
@HansPassant你爲什麼假設代碼只需要幾微秒?實際的工作可能需要相當長的時間。我假設OP排除了實際的後臺工作將要完成,因爲它尚未被編碼,或者因爲它與問題無關。 –