Har ett problem men ett spel jag håller på och gör. Jag vill använda piltangeterna men så fort jag håller ner en tangent (utom ctrl, alt och shift) så går cpu-användning upp till 100%. Detta beror på att det är så många objekt i formen. Finns det nått sätt att komma undan detta utan att ta bort objekten? För att återskapa problemet kan man använda följande snutt: Vilket event använder du dig av? Felet uppstår även när man har ett formulär utan kod med en massa objekt i. Alltså ett formulär utan events.Använda piltangenterna utan att få hög cpu-användn
Dim i As Integer
For i = 0 To 300
Dim box As New PictureBox()
box.BackColor = Color.Black
box.Location = New System.Drawing.Point(i, i)
Me.Controls.Add(box)
Next
Hoppas det finns någon lösning..Sv: Använda piltangenterna utan att få hög cpu-anvä
tror inte att det är så mycket hur många objekt du har, som vilka operationer du gör ...
Om du utan pausa din tråd lite granna och har tunga operationer som du upprepar massvis av gånger, komemr tråden i nästan alla fall att suga åt sig mer och mer CPU av det som är ledigt för att utföra det du vill göra så effektivt som möjligt ..
jag hade nog lagt upp det p en egen tråd, kanske pausat den lite i mellan åt, eller ställt om prioriteten ... Sv: Använda piltangenterna utan att få hög cpu-anvä
Testade att öka tråd-prioriteten och då gick det lite bättre men hittade en bättre lösning. Det verkar som att focus sätts till hela formuläret med alla objekt om man inte har någonting som specifikt tar emot fokus. Jag löste det genom att stoppa in en textbox och sedan läsa av tangenttryckningar från den. På det sättet tar inte pictureboxarna upp tangenttryckningarna och cpun håller sig på en lagom nivå. Typ såhär:
Private Sub KeyDowns(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Left Then
L = True
ElseIf e.KeyCode = Keys.Right Then
R = True
End If
End Sub
Private Sub KeyUps(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Left Then
L = False
ElseIf e.KeyCode = Keys.Right Then
R = False
End If
End Sub