首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi异常类分割(11)是由线程引起的?

Delphi异常类分割(11)是由线程引起的?
EN

Stack Overflow用户
提问于 2015-02-17 16:11:57
回答 1查看 144关注 0票数 0

当ButtonConnectClick被激活时,它会给出分段(11)异常。我认为它是由线程中的pocForm1.AddLine('new line by thread');引起的,但我不知道如何解决它。

这样做的目的是在线程处于活动状态时向备注字段添加行。

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 16:15:21

不能从主线程外部执行GUI代码。您需要确保在主线程上执行所有GUI代码。例如,通过调用TThread.QueueTThread.Synchronize

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28565840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档