unit a
...type
  TMyThread = class(TThread)
  private
  FDatFil: string;
  FDatPat: string;
  procedure sub;
  protected
  procedure Execute; Override;
  public
  constructor Create(datfil, datpat: string);
  end;implementation{TMyThread}
procedure TMyThread.sub;
begin
...
end;procedure TMyThread.Execute;
begin
  while not terminated do begin
    synchronize(sub);
  end;
end;constructor TMyThread.Create(datfil, datpat: string);
begin
  inherited Create(false);
  fdatfil := datfil;               //程序执行到这里出错,错误的太概意思是不能访问
  fdatpat := datpat;               //程序执行到这里出错,错误的太概意思是不能访问
  FreeOnTerminate := true;
end;end.请高手帮帮忙,在线等!!

解决方案 »

  1.   


    constructor TMyThread.Create(datfil, datpat: string); 
    begin 
      fdatfil := datfil;              
      fdatpat := datpat;               
      FreeOnTerminate := true; 
    inherited Create(false); 
    end; 
      

  2.   

    刚做了个测试,按你的代码,改了小小,没有发现问题,会不会是你其它的代码有问题?unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        ProgressBar1: TProgressBar;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;type 
      TMyThread = class(TThread)
      private 
      FDatFil: string; 
      FDatPat: string; 
      procedure sub; 
      protected 
      procedure Execute; Override; 
      public 
      constructor Create(datfil, datpat: string); 
      end;
    var
      Form1: TForm1;
      MyThread1:TMyThread;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    {-------------------调用线程-----------------------}
      MyThread1 := TMyThread.Create('s','v');
       with MyThread1 do
       begin
          FreeOnTerminate := True;
          Resume;
       end;
    end;{ TMyThread }constructor TMyThread.Create(datfil, datpat: string);
    begin
     fdatfil := datfil;
      fdatpat := datpat;               
      FreeOnTerminate := true; 
      inherited Create(false);end;procedure TMyThread.Execute;
    begin
      inherited;
       while not terminated do begin
        synchronize(sub);
      end;end;procedure TMyThread.sub;
    begin
      Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
    end;end.
      

  3.   

    我猜楼主是这样写的
    var
      MyThread: TMyThread;
    begin
      MyThread.Create;
    end;
    编译时Delphi不会提示错误,调用Create时并未创建对象,所以私有变量并未分配存储空间,导致访问地址错误