J'utilise un thread de travail pour charger des images .png (d'une chaîne de chemin) dans un objet PictureBox2 global, puis quitte le _RunWorkerCompleted pour utiliser la largeur et la hauteur de PictureBox2 pour un travail supplémentaire dans la méthode appelée processpic2 . Tout fonctionne bien jusqu'à ce que la cinquième ou la sixième image ait été ajoutée au PB. A ce stade, dans la méthode processpic2, une exception est levée car la propriété image de PictureBox2 est nulle.PictureBox cesse d'ajouter des images
Pourquoi un PB arrêterait-il de prendre des photos après un certain temps?
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
Ne pas traite les éléments de l'interface utilisateur du travailleur de fond, c'est pourquoi ... Utilisez un délégué et invoquez ... La zone d'image est sur un fil différent de celui de l'arrière-plan ... – Codexer
Je ne pense pas avoir besoin de répondre à cette question, donc pourquoi le commentaire. Rechercher invoke pour le contrôle de l'interface utilisateur avec lequel vous travaillez qui vous mènera dans la bonne direction. Si vous avez encore besoin d'aide, veuillez mettre à jour votre question et nous serons heureux de vous aider. – Codexer
Je suis d'accord avec Zaggler. Vous pouvez éventuellement renvoyer l'image chargée dans RunWorkerCompletedEventArgs (c.-à-d. 'E.Result') et définir' PictureBox.Image' dans RunWorkerCompleted. – SSS