繁体   English   中英

Delphi tbackgroundworker组件创建事件

[英]Delphi tbackgroundworker component create event

如何在tbackgroundworker中创建事件? 这是我尝试过的操作,但该事件不起作用:

unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, backgroundworker;

type
  TForm1 = class(TForm)
    BackgroundWorker: TBackgroundWorker;
    procedure BackgroundWorkerWork(Worker: TBackgroundWorker);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure BackgroundWorkerWork(Worker: TBackgroundWorker);
begin
  showmessage('HOI');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
BackgroundWorker.Cancel;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
BackgroundWorker.execute;
end;

end.

我认为它不起作用,因为backgroundworker.tworkevent和过程BackgroundWorkerWork(Worker:TBackgroundWorker)过程之间没有链接。 但是我该如何解决呢? 我不知道如何与背景工作人员一起添加活动

它“不起作用”(这不是很好的问题描述),因为您已将BackgroundWorkerWork事件声明为以下形式的方法:

type
  TForm1 = class(TForm)
    BackgroundWorker: TBackgroundWorker;
    procedure BackgroundWorkerWork(Worker: TBackgroundWorker);
    ...
  end

但是在这里将其声明为独立过程(请注意,过程名称之前没有TForm1

procedure BackgroundWorkerWork(Worker: TBackgroundWorker);

正确创建事件处理程序的最简单方法是使用“对象检查器”的“事件”选项卡。 只需双击要为其创建处理程序的事件,IDE将为其生成声明和一个空的实现(如果该声明不存在),然后转到实现。 在这种情况下,它将生成以下内容:

procedure TForm1.BackgroundWorkerWork(Worker: TBackgroundWorker);
begin

end;

如果您没有将TBackgroundWorker组件TBackgroundWorker到表单上,而是在运行时创建它,则您基本上仍会以相同的方式进行操作。

  • 在表单的private部分中声明事件:

     type TForm1 = class(TForm) // Other stuff added by IDE private BackgroundWorker: TBackgroundWorker; procedure BackgroundWorkerWork(Worker: TBackgroundWorker); end; 
  • 将光标放在表单声明中的任意位置,然后按Ctrl + Shift + C进行代码完成; 它将自动为事件处理程序添加外壳代码,以供您填写。

  • 在表单的OnCreate事件中,创建TBackgroundWorker并在代码中分配事件:

     procedure TForm1.FormCreate(Sender: TObject); begin BackgroundWorker := TBackgroundWorker.Create(Self); BackgroundWorker.OnWork := BackgroundWorkerWork; // Assign any other events to the BackgroundWorker here as well. end; 

(将来,当您说“不起作用”时,请具体说明它不起作用,包括可能存在的任何错误消息。当您收到错误消息时,请提供确切的错误消息,并在可能的情况下指出哪一行的代码导致了错误。如果您在询问时向我们提供了有关该问题的信息,则更容易获得问题的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM