0

Winapi で (テープ) ドライブを管理するクラスを作成しています。クラスへのブール値は、ドライブ (のハンドル) が開いているかどうかを示します。ドライブにアクセスするすべてのクラス メソッド (openおよびcloseメソッドを介して) は、このブール値を true に設定し、終了時に false に戻します。

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

ドライブのステータスを VCL フォームに表示したいと考えています。私の最初のアイデアは、イベントprocedure(isOpened: boolean) of object;をクラスに追加し、このイベントを open/close メソッドにトリガーすることでした。

ここで、ユーザーが GUI からドライブで時間のかかる操作 (巻き戻しなど) を実行したい場合、別のスレッドでこのアクションを実行します。そのため、open/close メソッドによってイベントがトリガーされると、GUI に関して別のスレッドから呼び出されます。イベント ハンドラでメイン フォームにドライブのステータスを表示させたい場合、これは悪いことです。

話の教訓: これは初心者にとって非常に一般的な問題だと思います。そのため、どうすればこの問題を解決できますか?

私に来る唯一の解決策は、イベントハンドラーをGUIに追加し、これを他のスレッドに渡すことですが、私にはかなり貧弱な解決策のようです...

4

0 に答える 0