事件处理,线程和gui接口

时间:2013-07-18 15:35:25

标签: delphi

我正在编写一个使用Winapi管理(磁带)驱动器的类。类中的布尔值告诉是否打开了(驱动器的句柄)。访问驱动器的所有类方法(通过openclose方法)将此布尔值设置为true,并在完成时将其设置为false。

TTapeDrive = class
private
    _isOpened: boolean;
    procedure open();
    procedure close();
...
end;

我想在我的VCL表单上显示驱动器的状态。我的第一个想法是向类中添加一个事件procedure(isOpened: boolean) of object;并将此事件触发到打开/关闭方法中。

现在,当用户想要从GUI执行一个耗时的驱动器操作(如倒带)时,我在另一个线程上执行此操作。因此,当事件由open / close方法触发时,它将从另一个线程调用到GUI。这很糟糕,如果我希望我的事件处理程序在主窗体上显示驱动器的状态。

故事的道德:我认为这是一个非常普遍的问题,对于一个新手来说,所以......我怎么能解决这个问题呢?

我遇到的唯一解决方案是向GUI添加一个事件处理程序并将其传递给另一个线程,但在我看来这个解决方案很差......

0 个答案:

没有答案