Laden...

GUI: Windows-Forms - PaintEvent

Erstellt von ZeraTFK vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.156 Views
Thema geschlossen
Z
ZeraTFK Themenstarter:in
4 Beiträge seit 2011
vor 12 Jahren
GUI: Windows-Forms - PaintEvent

Hallo,

ich versuche seit einigen Stunden das PaintEvent der Form in ein Thread auszulagern.

Der Hintergrund ist folgender:
Es können momentan beliebig viele Grafiken auf die Form gezeichnet werden, welche vorerst berechnet werden. Zudem muss noch ermittelt werden welche Grafiken überhaupt gezeichnet werden sollen.
All diese Berechnungen sorgen bei mehreren Grafiken für ruckler in dem PaintEvent der Form.

Mein Gedanke war nun all diese Berechnungen in ein Thread auszulagern welcher alles Berechnet und am ende das fertig erstellte bild an die PaintEventfunktion übergibt.

Habt ihr eine Idee wie ich das am besten anstellen kann?

EDIT: Ich sollte vllt. dazu sagen, versuche da All darzustellen.
Es gibt Planeten und andere Flugobjekte welche sich auf dem Monitor bewegen.
Diese können irgend eine Position/größe besitzen.
Daher geht auch keine Listbox

A
118 Beiträge seit 2009
vor 12 Jahren

Wenn es ganze Bilder sind, die berechnet werden müssen, dann lade sie doch in eine List<Bitmap>.

Mfg
Aratar

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo ZeraTFK,

das Paint-Event kannst du nicht in einem extra Thread auslagern. Das Zeichnen muss aus dem GUI-Thread erfolgen. Du kannst natürlich das Laden oder die Berechnung der Bitmaps in einen extra Thread auslagern. Alles was du dabei wissen musst, steht in [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke).

Wobei du das Anstoßen des Threads besser nicht aus dem Paint-Event machst und wenn doch, dann solltest du auf jeden Fall sofort was zeichnen, z.B. den bisherigen Stand. Warte mit dem Zeichnen nicht, bis der Thread fertig ist. Wenn der Thread fertig ist und einen neuen Stand berechnet hat, kannst du Invalidate aufrufen (natürlich aus dem GUI-Thread heraus) und damit das Zeichnen erneut anstoßen.

herbivore

Thema geschlossen