Variable in code einfügen visual basic 2010

Hallo wer-weiss-was-ler,

ich möchte einen Visual basic 2010 code, welcher ein Photo per webcam macht und dieses dann in einer picture box anzeigt dreimal wiederholen und dann in einer jeweils neuen picturebox anzeigen lassen.

Dazu hätte ich eine For-schleife benutzt und dieses i der for-schleife also Variable für meine Pictureboxen.

Doch das einfügen der Variable i in den code der picturebox macht irgendwie probleme. Haben Sie eine idee wie das gehen könnte?

mein code:

 Private Sub Button3\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) \_
 Handles Button3.Click
 Dim i As Integer

anfang:
 For i = 2 To 6

 If Not [Handle].Equals(IntPtr.Zero) Then
 w32.MyHandle = [Handle]
 Dim img As Image = w32.GetImage()

 If img IsNot Nothing Then
 um dieses i -----\> (Me.PictureBox&"i").Image = img

 End If
 Else
 MessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
 End If
 Next i
 GoTo anfang

 End Sub

Grundsätzlich müsste der code doch funktionieren oder?

vielen dank für eure mühe
michael

Hallo,

ich hab noch eine frage, wenn ich jetzt das mit der for-schleife weg lasse und einfach den code 3 mal (mit veränderter picturebox2,3,4) hintereinander schreib müsste es ja eigentlich gehen.

wenn ich zwischen diesen boxen dann ein

 threading.thread.sleep(1000)

einfüge, soll das Programm 3 mal hintereinander im Abstand von 1sec ein Photo machen und in der Entsprechenden Picturebox abspeichern.
Doch irgendwie bleibt das Programm einfach nur kurz stehen und speichert dann in alle 3 Pictureboxen das gleiche Bild ab.

Ist der code

 threading...

falsch oder warum ist das so?
Wenn ich das mit einzellnen buttons ausführe(manuell sozusagen) geht das ganze ja auch.

hier noch einmal meinen code so wie ich mir das vorstelle

 Private Sub Button3\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) \_
 Handles Button3.Click


 If Not [Handle].Equals(IntPtr.Zero) Then
 w32.MyHandle = [Handle]
 Dim img As Image = w32.GetImage()

 If img IsNot Nothing Then
 Me.PictureBox2.Image = img

 End If
 Else
 MessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
 End If

 Threading.Thread.Sleep(1000)


 If Not [Handle].Equals(IntPtr.Zero) Then
 w32.MyHandle = [Handle]
 Dim img As Image = w32.GetImage()

 If img IsNot Nothing Then
 Me.PictureBox3.Image = img

 End If
 Else
 MessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
 End If




 End Sub

Vielen dank
Michael

Tipp: Niemals (damit meine ich NIEMALS) in einer Windowsanwendung Thread.Sleep() aufrufen.
Grund: Jeder Prozess (also auch dein Programm) kann verschiedene Threads haben. Jeder Thread arbeitet seine Aufgaben eine nach der anderen ab. Die Threads laufen also (wenn genug Kerne da sind) parallel. Innerhalb eines Threads läuft aber alles nach einander (sequentiell). Jetzt gibt es einen speziellen Thread, genannt GUI-Thread, der lauscht die ganze Zeit auf Windowsmeldungen und verarbeitet die. Das sind z. B. Buttonklick, Fenster neu malen, Fenster verschoben, Maus verschoben, und viele mehr. Hast du dich für ein Ereignis registriert (z. B. ButtonX_Click), dann wird das aufgerufen. Solange dein Code läuft, kann der GUI-Thread nicht mehr lauschen, weil er ja deinen Code ausführen muss. Normalerweise ist das kein Problem, weil den Text eines Labels ändern dauert nur Bruchteile einer Sekunde. Wenn du aber Sleep() aufrufst, dann blockiert das den GUI-Thread, was in einem Hängen oder „Reagiert nicht mehr“ resultiert. Genau das gleiche passiert, wenn du in Ereignissen lang andauernde Operationen durchführt, z. B. Pi auf 1.000.000 Nachkommastellen berechnen.

Nimm zum regelmäßigen tun von etwas lieber einen Timer, der kommt mit Intervallen von 1 Sekunde gut zurecht, vorausgesetzt, das was er tut dauert kürzer. Denn der Timer führt sein Ereignis „Tick“ auch im GUI-Thread aus.

Grüße, JasonDelife.