Ich habe versucht, animierte Flut füllen (Scanline-Algorithmus) mit Schlaf in vb. So wird die Reihenfolge der Pixel angezeigt. Es wird für ein wenig arbeiten, aber dann wird es zurückgeben Objekt zur Zeit an anderer StelleAnimation von flood füllen vb return object wird derzeit an anderer Stelle verwendet thread.sleep
mein Code verwendet wird, Dies ist
Sub AnimatedRFRecursive(ByVal P As Point, ByVal C0 As Color, ByVal C1 As Color)
Dim i, xL, xR As Integer
Dim a As Point
i = P.X
While (i >= 0 AndAlso BMP.GetPixel(i, P.Y) = C0)
Thread.Sleep(10)
BMP.SetPixel(i, P.Y, C1)
PictureBox1.Invoke(New Action(Sub() PictureBox1.Image = BMP))
i -= 1
End While
xL = i + 1
i = P.X + 1
While (i < 500 AndAlso BMP.GetPixel(i, P.Y) = C0)
Thread.Sleep(10)
BMP.SetPixel(i, P.Y, C1)
PictureBox1.Invoke(New Action(Sub() PictureBox1.Image = BMP))
End While
xR = i - 1
For i = xL To xR
If (P.Y < 349 AndAlso BMP.GetPixel(i, P.Y + 1) = C0) Then
a.X = i
a.Y = P.Y + 1
AnimatedRFRecursive(a, C0, C1)
End If
If (P.Y > 0 AndAlso BMP.GetPixel(i, P.Y - 1) = C0) Then
a.X = i
a.Y = P.Y - 1
AnimatedRFRecursive(a, C0, C1)
End If
Next
End Sub
Dies ist, wie ich es nennen
Dim thr As New Threading.Thread(Sub() AnimatedRFRecursive(point, C, Color))
thr.Start()
Bitte sagen Sie mir, wo tat Ich mache falsch oder wenn Sie eine andere Methode haben, die auch funktioniert. Danke
Erhalten Sie den Fehler, wenn Sie die Picture1.Invoke Zeilen auskommentieren? – ChicagoMike
habe ich nicht. Aber die Bildfüllung wird nicht angezeigt – NatJ
Sie werden nicht viel für diesen Code verwenden. Es schlägt fehl, da auf Bitmap von jeweils nur einem Thread zugegriffen werden kann. Der zweite Thread, der darauf zugreift, ist der UI-Thread, wenn der PictureBox-Inhalt neu gezeichnet werden muss. Ziemlich zufällig, aber ziemlich wahrscheinlich. Normalerweise würden Sie das Schlüsselwort * lock * verwenden, um dies zu verhindern, aber Sie können diese Anweisung nicht in den Code von PictureBox einfügen. Du musst dein eigenes machen. Verwenden Sie einfach keinen Thread, es hilft überhaupt nicht. Verwenden Sie stattdessen einen Timer. –