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に追加し、これを他のスレッドに渡すことですが、私にはかなり貧弱な解決策のようです...