Delphi/C++Builder Thread で TXMLDocument を使う
スレッド内で TXMLDocument は使えません。例外が発生します
Synchronize を利用して、メインスレッドで動かしてちょ。という事のようです。
関数内の途中だけ、メインスレッドに持ってこれて、可視性も良いじゃん
変数も一部(for の I はローカル変数じゃないとNG)を除いて、そのまま使えるし~
Synchronize を利用して、メインスレッドで動かしてちょ。という事のようです。
- XMLDoc := TXMLDocument.Create(Application.MainForm);
- try
- XMLDoc.LoadFromXML(AXmlData); // ←ココで例外発生
- XmlNode := XMLDoc.DocumentElement;
- for I := 0 to XmlNode.ChildNodes.Count - 1 do begin
- // ...
- end;
- finally
- XMLDoc.Free;
- end;
ということで無名メソッド(匿名メソッド)とSynchronizeで
- Synchronize(
- procedure()
- var I: Integer;
- begin
- XMLDoc := TXMLDocument.Create(Application.MainForm);
- try
- XMLDoc.LoadFromXML(AXmlData);
- XmlNode := XMLDoc.DocumentElement;
- for I := 0 to XmlNode.ChildNodes.Count - 1 do begin
- // ...
- end;
- finally
- XMLDoc.Free;
- end;
- end);
コメント