[英]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.