0

我正在编写一个使用 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 并将其传递给另一个线程,但在我看来这是一个非常糟糕的解决方案......

4

0 回答 0