Første pointe: Bryd din kode op i mindre dele. F.eks. funktionen til at tage et billede; læg den ind i en separat funktion, der tager en sti som argument. Funktionen er derefter kun ansvarlig for at tage billedet og gemme det. Funktionen kan eventuelt returnere sand eller falsk, alt efter om det lykkedes. En videreudvikling kunne så være, at funktionen returnerer selve billedet og så have en ny funktion der gemmer det. I ca. VB ville det laves som:
Public Sub knipsBilledeOgGemDet(ByVal strFilnavn as String)
' noget kode for at tage billedet og indsætte det som baggrund i form2
Form2.BackgroundImage.Save(strFilnavn)
End Sub
Nu kan jeg ikke VB.Net, så du kan ikke bruge min kode ren.
Derefter ville jeg læse
det første hit fra Google-søgningen og se, at man kan placere en Timer-control på formularen. Denne indstilles til 2000 ms og disables (sæt "Enabled" = False). Dobbelt klik timeren for at få dens event. Her indsætter du:
If iAntalKnips = iMaxAntalBilleder Then
timer.enabled = False
Exit Sub
End if
Call knipsBilledeOgGemDet("c:/Pic" & iAntalKnips & ".bmp")
iAntalKnips = iAntalKnips + 1
Din command3_click event sætter du til:
If v.Preview Then
If timer.enabled = False Then
iAntalKnips = 0
iMaxAntalBilleder = 59993
timer.enabled = True
Else
timer.enabled = False ' Stopper timeren hvis den var i gang.
End If
End If
Og så tænker du: "iAntalKnips? iMaxAntalBilleder? Dem har jeg ikke defineret?" Nej, dem definerer du globalt, dvs. i toppen af Form2's kode og udenfor funktioner og subs. Det gør at alle funktionerne har adgang til dem og de forbliver defineret selv efter en funktion er færdig.
Problemet i din kode er, at du kører en While-løkke mens du venter. Sådan en æder ressourcer, uden egentligt at bruge dem, udover hvert andet sekund. En Timer bruger ikke CPU-kræfter på at venter på sin tur, men har en smart bagvedliggende måde at bestemme, at nu er det ved at være tid.