![]() |
Problem mit dem Ausführen eines Threads
Hallo,
ich habe die Reporterzeugung in einen Thread ausgelagert:
Delphi-Quellcode:
Mein Problem: Beim Drucken und des eigentlichen Aufrufs 'ExecuteReport' in der Klasse DMReport kommt es öfter zu der Fehlermeldung:
procedure TForm_Main.PrintReport(Sender: TObject);
var ReportThread: TReportThread; begin ReportThread:= TReportThread.create(true,'Packauftrag',FocusedGrid,0); ... constructor TReportThread.create(CreateSuspended: Boolean;ReportName: String; Grid: TDBGrid; PrinterIndex: Integer); begin // Thread erzeugen und suspendieren inherited Create(CreateSuspended); // Initialisieren FGrid:= Grid; FPrinterIndex:= PrinterIndex; FReportName:=ReportName; // Thread starten self.Suspended:= false; end; {- TReportThread.Execute } procedure TReportThread.Execute; begin // Diese Funktion habe ich vorher direkt aus der Anwendung aufgerufen // Jetzt ist sie in diesem Thread gekapselt DM_Report.PrintReport(FReportName, FGrid,FPrinterIndex); end; EInvalidOperation with message 'Canvas does not allow drawing' Diese Meldung tritt aber nicht immer auf. Setze ich beim Aufruf von 'ExecuteReport' einen BreakPoint und lasse die Anwendung von dort weiterlaufen, gibt es keine Fehlermeldung. Auch der direkte Aufruf bevor ich Threads benutzte klappte...?! Kann mir jemand helfen? |
Re: Problem mit dem Ausführen eines Threads
Die VCL ist nicht threadsafe. Hast du den text gelesen, den dir Delphi als Komentar in deine ThreadUnit geschrieben hat?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz