![]() |
XML in Threads
Ich erstell ein XML-Dokument innerhalb eines Threads (TThread). Leider schlägt das Erstellen des DOMDokumentes fehl:
Delphi-Quellcode:
Ausserhalb eines Threads hat es wunderbar funktioniert. Muss ich noch irgwendwas beachten, initialisiern (Ich meine, da war mal was gewesen: :gruebel:) oder so?
XMLDoc := CoDOMDocument.Create;
|
Re: XML in Threads
Ja, jeder Thread muss auf COM-Objekte vorbereitet werden. Für den Anwendungsthread macht Delphi das automatisch.
Delphi-Quellcode:
Wichtig: CoInitialize und CoUninitialize müssen gleich oft aufgerufen werden. Also evtl. alles in der Execute-Methode und ein try...finally drumrum, sonst gibt es im Programm später böse AVs oder anderes unerklärliches Verhalten.
uses
ActiveX; constructor TMyThread.Create(Suspended: Boolean); begin ... CoInitialize(nil); //evtl. mit "Ex" am Ende... end; destructor TMyThread.Destroy; begin ... CoUninitialize; inherited; end; ...:cat:... |
Re: XML in Threads
Hm. Ich habe es jetzt so:
Delphi-Quellcode:
Aber das:
constructor TSave.Create(Suspended: Boolean);
begin inherited Create(Suspended); CoInitialize(nil); end; destructor TSave.Destroy; begin CoUninitialize; inherited; end;
Delphi-Quellcode:
funktioniert immer noch nicht. XMLDoc ist immer noch nil. :?
XMLDoc := CoDOMDocument.Create;
Aufruf:
Delphi-Quellcode:
Update: Wenn es in der Execute Methode steht funktioniert es.
procedure TForm2.tbbSaveClick(Sender: TObject);
var Save : TSave; begin if SaveDialog1.Execute then begin Save := TSave.Create(True); try try Save.FreeOnTerminate; Save.Filename := SaveDialog1.FileName; Save.IEVect := ImageEnVect1; Save.OnProgress := Progress; Save.OnFinish := Finish; Save.Resume; |
Re: XML in Threads
Zitat:
...:cat:... P.S.: Nutze
Delphi-Quellcode:
, damit Du das XML Objekt auch sicher ohne Critical Sections ausserhalb des erstellenden Threads nutzen kannst.
XMLDoc := CoFreeThreadedDOMDocument.Create;
|
Re: XML in Threads
Danke für den Tipp. Das hat gleich noch einen Seiteneffekt behoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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