+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

Multithreading mit List & Label

(combit Team) #1
Gilt ab List & Label 15
List & Label kann in mehreren Threads gleichzeitig verwendet werden. Auf diese Weise können umfangreichere Druck-Aufgaben z.B. auf mehrere Prozessoren/Cores verteilt werden. Intern wird von diesen Möglichkeiten rege Gebrauch gemacht, z.B. bei der Druckvorschau im Designer oder beim DrillDown.

Bei der Verwendung in Multithread-Umgebungen sind einige Punkte zu berücksichtigen:

1) Achten Sie darauf, dass ein List & Label Job (bzw. eine Komponenteninstanz) immer nur innerhalb des gleichen Threads verwendet wird. Die Erzeugung, Verwendung und Zerstörung des Jobs / der Komponente muss also im gleichen Thread stattfinden. Wenn Sie mehrere parallele Druckthreads starten möchten, muss also jeder dieser Druckthreads seinen eigenen Job öffnen und schließen. Hintergrund: Windows-GDI-Ressourcen wie Fensterhandles, Drucker-Devicekontexte etc. können nicht aus verschiedenen Threads verwendet werden.

2) Stellen Sie sicher, dass Sie vor dem Start des ersten Threads einen sogenannten "Schutzjob" öffnen (bzw. eine Komponenteninstanz erzeugen) und diesen erst nach dem Beenden des letzten Threads wieder schließen. Typischerweise wird Ihre Applikation beim Start diesen Job erzeugen und beim Beenden wieder zerstören. Hintergrund: der erste Job erzeugt einige Hilfsobjekte, die im gleichen Thread wieder zerstört werden müssen. Zudem kann die Performance auf diese Weise deutlich verbessert werden, da ein häufiges Laden und Entladen der List & Label DLLs vermieden wird.

3) Threads, die den Designer anzeigen, müssen das Single Threaded Apartment-Modell (STA) verwenden. Es dürfen also keine .NET Worker Threads aus dem Threadpool sein, da diese das Multi Threaded Apartment-Modell (MTA) verwenden. Hintergrund: für die Drag & Drop-Unterstützung im Designer muss OleInitialize() aufgerufen werden, was STA zwingend benötigt.
IDKBTD000795 KBTD000795