combit List & Label 28 - .NET Hilfe
Einführung in die Programmierung / Weitere wichtige Konzepte / Multithreading und Schutzjob
In diesem Thema
    Multithreading und Schutzjob
    In diesem Thema

    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.

     

    List & Label Objekt in Threads

    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.

     

    Schutzjob

    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.

    Hinweis: Soll List & Label unabhängig von Druckertreibern arbeiten (meist in Web Anwedungen etc.) kann dafür der Printerless-Modus aktiviert werden. Die Eigenschaft Printerless muss dafür im ersten Objekt/Schutzjob gesetzt werden. Eine Mischung von aktiviertem und deaktiviertem Printerless-Modus in den in der Anwendung verwendeten Objekten wird nicht unterstützt und kann zu unerwartetem Verhalten führen.

     

    Thread-Modell

    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.