Dúvida com Threads e XML

Delphi

15/02/2012

Pessoal,

Estou trabalhando com Threads e XML no Delphi XE.

Segue meu código completo com a dúvida logo abaixo dele:
unit Unit2;

interface

uses
  Classes, ComCtrls, xmldom, XMLIntf, msxmldom, XMLDoc, ActiveX, SysUtils;

type
  TestThread = class(TThread)
  private
    FProgressBar: TProgressBar;
    FLista: TStrings;
    FDataI: TDateTime;
    FDataF: TDateTime;
    Percent: Integer;
    procedure UpdateProgress;
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean; ProgressBar: TProgressBar;
      lista: TStrings; dataI, dataF: TDateTime); reintroduce;
  end;

implementation

{ TestThread }

constructor TestThread.Create(CreateSuspended: Boolean;
  ProgressBar: TProgressBar; lista: TStrings; dataI, dataF: TDateTime);
begin
  FProgressBar := ProgressBar;
  FLista := lista;
  FDataI := dataI;
  FDataF := dataF;
  inherited Create(CreateSuspended);
end;

procedure TestThread.Execute;
var
  i: Integer;
  XMLNFe: TXMLDocument;
  NodePai, NodeFilho, NodeSec, NodeTemp, NodeEmitente: IXMLNode;
begin
  FProgressBar.Min := 0;
  FProgressBar.Max := FLista.Count;
  try
    for i := 0 to FLista.Count do
    begin
      CoInitialize(nil);
      Percent := i;
      Synchronize(UpdateProgress);
      XMLNFe := TXMLDocument.Create(nil);
      XMLNFe.ParseOptions:= [poResolveExternals, poValidateOnParse];

      XMLNFe.LoadFromFile(FLista[i]);
      XMLNFe.Active := True;

      NodePai := XMLNFe.DocumentElement.ChildNodes.First;

      if (NodePai.NodeName = NFe) then
      begin
        NodeFilho := NodePai.ChildNodes.FindNode(infNFe);
        NodeSec := NodeFilho.ChildNodes[ide];
      end;
    end;
  finally
    XMLNFe.Active := False;
    FLista.Free;
    CoUninitialize;
  end;
end;

procedure TestThread.UpdateProgress;
begin
  FProgressBar.Position := Percent;
end;

end.


A parte que tenho dúvida é está:
NodePai := XMLNFe.DocumentElement.ChildNodes.First;


Aqui a thread aparentemente para, posso até pedir outra sem problemas que vejo no console do delphi ela abrindo e recebendo novo ID, porém, ñ acontece nada com nenhuma das abertas.

Alguém pode me ajudar?
Eduardo Ludgero
Eduardo Ludgero

Eduardo Ludgero

Curtidas 0

Respostas

Eduardo Ludgero

Eduardo Ludgero

15/02/2012

Pessoal,

Já resolvi!
Declarei Form no Uses da Classe Thread e na hora de Criar o XMLDocument em vez de nil passei Application.

Obrigado...
GOSTEI 0
Marco Salles

Marco Salles

15/02/2012

Pessoal,

Já resolvi!
Declarei Form no Uses da Classe Thread e na hora de Criar o XMLDocument em vez de nil passei Application.

Obrigado...


Obrigado por compartilhar , mas acredito que voce poderia utilizar o nil ou um nome de Arquivo no constructor
porém a variavel deve ser definida como sendo da Interface IXmlDocument e não da classe TXmlDocument
GOSTEI 0
POSTAR