如何在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)过程之间没有链接。 但我该如何解决这个问题呢?我不知道如何使用backgroundworker添加活动
答案 0 :(得分:3)
它“无法正常工作”(这不是一个很好的问题描述),因为您已将BackgroundWorkerWork
事件声明为此处表单的方法:
type
TForm1 = class(TForm)
BackgroundWorker: TBackgroundWorker;
procedure BackgroundWorkerWork(Worker: TBackgroundWorker);
...
end
但是在这里宣布它是一个独立的程序(注意程序名称前面没有TForm1
:
procedure BackgroundWorkerWork(Worker: TBackgroundWorker);
正确创建事件处理程序的最简单方法是使用Object Inspector的Events选项卡;只需双击要为其创建处理程序的事件,IDE将为其生成声明和空实现(如果它不存在),然后转到实现。在这种情况下,它会生成这个:
procedure TForm1.BackgroundWorkerWork(Worker: TBackgroundWorker);
begin
end;
如果你没有在表单上删除TBackgroundWorker
组件,而是在运行时创建它,你仍然可以基本相同的方式进行。
在表单的private
部分声明事件:
type
TForm1 = class(TForm)
// Other stuff added by IDE
private
BackgroundWorker: TBackgroundWorker;
procedure BackgroundWorkerWork(Worker: TBackgroundWorker);
end;
将光标放在表单声明中的任意位置,然后按 Ctrl + Shift + C 进行代码完成;它会自动添加事件处理程序的shell代码供您填写。
在表单的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;
(将来当你说“不起作用”时,请解释具体它是如何工作的,包括你可能有的任何错误信息。当你有错误信息时,包括完全错误消息,并在可能的情况下指示代码的哪一行导致错误。如果您在询问时向我们提供有关问题的信息,则可以更轻松地获得问题的答案。