【发布时间】:2016-04-08 21:32:14
【问题描述】:
当我关闭应用程序的表单时出现 EAccessViolation,我不知道如何处理,我有两个单元,这里是主要单元相关代码:
unit MainUnit;
uses
.., myComponent1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
MyComponent1.doSomeWork(p1, p2, ..., pn);
end;
procedure TForm1.OnMyComponen1tEvent(sender: TObject; p: Integer);
begin
memo1.Lines.Add(message);
end;
end.
这个单元使用的另一个单元是一个组件类,我在其中向 memo1 发送一个信号来显示消息,当然使用组件事件,它是这样的:
unit myComponent;
type
TMyComponentEvent = procedure(sender: TObject; p: integer) of object;
type
TMyComponent = class(TComponent)
// Properties and events declaration
procedure TPThread.Execute;
begin
try
// Create and run some worker threads
// Wait for them to finish the job
// This is the last thing to do:
if Assigned(FOnMyComponentEvent) then
begin
FOnMyComponentEvent(Self, p);
end;
finally
//free ressources
end;
end;
procedure TMyComponent.DoSomeWork;
begin
TPThread.Create(p1, p2 ...);
end;
end.
当我在程序完成其工作(线程仍在工作)之前关闭表单时,我得到了那个异常,但有时,没有引发异常。好吧,当引发异常时,它表示该行:memo1.Lines.Add(message);。
我不知道如何解决它,那么如何防止异常发生?
【问题讨论】:
-
在对象被销毁后不要访问它们。如果您需要有关如何实现这一目标的帮助,我们希望看到一些代码。
标签: delphi exception-handling delphi-2010