Frage von Gomze, 37

C# wartezeit beim Click entfernen?

Wenn ich z.B. eine picturebox mit klicks voll spamme wird nur jede 0.5 Sekunden ein klick gewährtet, was kann ich dagegen machen?

Antwort
von CrystalixXx, 16

Entweder das, was PWolff erwähnt (mit hoher Wahrscheinlichkeit) oder der auszuführende Programmcode nimmt zu viel Zeit in Anspruch (geringere Wahrscheinlichkeit für das genannte Problem).

Eine leere Form mit einer Picturebox, die bei einem Klick und einem Doppelklick einen Zähler inkrementiert, schafft bei mir 1000 Klicks innerhalb der nachfolgenden Zeiten:

01. Durchlauf: 305 ms
02. Durchlauf: 300 ms
03. Durchlauf: 299 ms
04. Durchlauf: 302 ms
05. Durchlauf: 313 ms
06. Durchlauf: 300 ms
07. Durchlauf: 306 ms
08. Durchlauf: 300 ms
09. Durchlauf: 240 ms
10. Durchlauf: 304 ms
11. Durchlauf: 301 ms
12. Durchlauf: 303 ms
13. Durchlauf: 298 ms

Realistisch ist der Test zwar nicht, wenn nur ein Zähler inkrementiert wird, zeigt aber das Potenzial. Für den "typischen" Entwickler reichen die .NET Methoden bestens aus. Da gibt es keinen Grund eigene Methoden mit direktem API Aufruf zu schreiben.

Antwort
von Berny96, 27

Das ist das Problem mit C#, Windows und die heutige Zeit. Programmiersprachen werden immer einfacher und praktischer aber dadurch dass so viel intern passiert werden Anwendungen immer langsamer und verbrauchen mehr Rechenleistung. Wie @priesterlein schon sagte kannst du die Klicks selber registrieren wobei das ein wenig Aufwändiger wird da du berechnen musst ob der Klick denn auf dem Picturebox stattgefunden hat oder nicht. Dafür musst du die Position des Fensters auf dem Bildschirm wissen und dazu noch die Position des Pictureboxes relativ zum enthaltenen Fenster. 

Antwort
von PWolff, 17

Hört sich nach der Totzeit beim Warten auf Doppelklick an.

Leite das DoubleClick-Ereignis auf dasselbe Ereignis um:

pictureBox1.DoubleClick += pictureBox1_Click;

(im Konstruktor, nach InitializeComponent)

Keine passende Antwort gefunden?

Fragen Sie die Community