Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
GUI: Windows-Forms - PaintEvent
ZeraTFK
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

GUI: Windows-Forms - PaintEvent

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Aratar
myCSharp.de - Member



Dabei seit:
Beiträge: 126

beantworten | zitieren | melden

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

Mfg
Aratar
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers