当ButtonConnectClick被激活时,它会给出分段(11)异常。我认为它是由线程中的pocForm1.AddLine('new line by thread');引起的,但我不知道如何解决它。
这样做的目的是在线程处于活动状态时向备注字段添加行。
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, FMX.Layouts,
FMX.Memo, FMX.StdCtrls, IdGlobal, IdIntercept;
type
TpocForm1 = class(TForm)
ButtonConnect: TButton;
ButtonDisconnect: TButton;
Memo1: TMemo;
procedure ButtonConnectClick(Sender: TObject);
procedure ButtonDisconnectClick(Sender: TObject);
procedure AddLine(text : String);
private
public
{ Public declarations }
end;
TpocTCPClientThread = class(TThread)
//TCPClient: TIdTCPClient;
protected
procedure Execute; override;
end;
var
pocForm1: TpocForm1;
implementation
{$R *.fmx}
var
thread: TpocTCPClientThread;
procedure TpocForm1.ButtonConnectClick(Sender: TObject);
begin
Memo1.Lines.Add('Client connected with server');
thread:= TpocTCPClientThread.Create(False);
end;
procedure TpocForm1.ButtonDisconnectClick(Sender: TObject);
begin
thread.Terminate;
thread.WaitFor;
FreeAndNil(thread);
Memo1.Lines.Add('Client disconnected from server');
end;
procedure TpocForm1.AddLine(text : String);
begin
Memo1.Lines.Add(text);
end;
procedure TpocTCPClientThread.Execute();
begin
while not Terminated do
begin
pocForm1.AddLine('new line by thread');
end;
end;
end.发布于 2015-02-17 16:15:21
不能从主线程外部执行GUI代码。您需要确保在主线程上执行所有GUI代码。例如,通过调用TThread.Queue或TThread.Synchronize。
https://stackoverflow.com/questions/28565840
复制相似问题