Return 来自线程的字符串 Delphi

Return String from Thread Delphi

我正在使用 Delphi XE6。

我有一个线程,我在其中传递了一个 ID,并希望取回该线程创建的字符串。我查看了所有示例,但是当线程 运行 我只需要它 OnTerminate.

时,它们都会返回值

从表单调用线程:

StringReturnedFromThread := PrintThread.Create(MacId);

PrintThread = class(TThread)
  private        
    MyReturnStr, PrinterMacId : String;
  public
        constructor Create(MacId: String); reintroduce;
        procedure OnThreadTerminate(Sender: TObject);
  protected
    procedure Execute; override;
  end;

constructor PrintThread.Create(MacId: String);
begin
    inherited Create(False);
    OnTerminate := OnThreadTerminate;
    FreeOnTerminate := True;
    PrinterMacId := MacId;
end;

procedure PrintThread.Execute;
begin
    PrepareConnection;
    MyReturnStr:= RequestPrintJobs(PrinterMacId);
end;

procedure PrintThread.OnThreadTerminate(Sender: TObject);
begin


end;

感谢您的帮助。

您需要拦截线程终止。一种方法是使用 TThread.OnTerminate event/callback.

下面是示例代码。

螺纹单位:

unit Processes;

interface

uses
  System.Classes;

type
  TProcess = class(TThread)
  private
    FReturnStr: string;
    FMacId: string;
  protected
    procedure Execute; override;
  public
    property MacId: string read FMacId write FMacId;
    property ReturnStr: string read FReturnStr write FReturnStr;
    constructor Create;
  end;

implementation

constructor TProcess.Create;
begin
  inherited Create(True);
  FreeOnTerminate := True;
end;

procedure TProcess.Execute;
begin
  // Some hard calculation here
  FReturnStr := FMacId + 'BLA';
end;

end.

线程使用:

uses Processes;

procedure TForm1.Button1Click(Sender: TObject);
var P: TProcess;
begin
  // Create the thread
  P := TProcess.Create;
  // Initialize it
  P.MacId := 'MID123';
  // Callback handler
  P.OnTerminate := OnProcessTerminate;
  // Let's go
  P.Start;
end;

procedure TForm1.OnProcessTerminate(Sender: TObject);
var P: TProcess;
begin
  // The thread has been terminated
  P := TProcess(Sender);
  ShowMessage(P.ReturnStr);
end;

线程将 return MID123BLA 终止。