我正在使用工作线程将.png图像(从路径字符串)加载到全局PictureBox2对象中,然后退出_RunWorkerCompleted以在名为processpic2的方法中使用PictureBox2的宽度和高度进行其他工作。一切正常,直到第5或第6张图像被添加到PB。这一点,在processpic2方法中,由于PictureBox2的图像属性评估为无,所以抛出异常。PictureBox停止添加图像
为什么PB会在一段时间后停止拍照?
Public Class Form1
Public WithEvents BackgroundWorker1 As New System.ComponentModel.BackgroundWorker
Private Sub BackGroundworker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim args As ArgumentType = e.Argument
PictureBox2.Image = Nothing
PictureBox2.Invalidate()
Dim img As Image
Using str As Stream = File.OpenRead(args._pathstr)
img = Image.FromStream(str)
End Using
PictureBox2.Image = img
e.Result = "done"
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.
processpic2()
End Sub
Sub btnLoadPicture(pathstr)
Dim args As ArgumentType = New ArgumentType()
args._pathstr = pathstr
BackgroundWorker1.RunWorkerAsync(args)
End Sub
Sub processpic2()
If PictureBox2.Image Is Nothing Then MsgBox("Image is Nothing")
End Sub
不要从后台工作进程的UI元素,这就是为什么...使用委托和调用...图片框是在不同的线程比背景的工作人员... – Codexer
我不认为我需要回答这个为什么评论。看看你正在使用的UI控件的调用会让你朝着正确的方向前进。如果您仍然需要帮助,请更新您的问题,我们很乐意为您提供帮助。 – Codexer
我同意Zaggler。你可能会在'RunWorkerCompletedEventArgs'(即'e.Result')中返回加载的图像,并在RunWorkerCompleted中设置'PictureBox.Image'。 – SSS