-2

TPersistentクラスが csDesigning 状態であることを検出するにはどうすればよいですか?

4

1 に答える 1

0

データベースを操作するときに、リッチなユーザー エクスペリエンスが必要な場合は、スレッドが役立ちます。スレッドは、長いタスクを実行するという唯一の目的を担当する必要があります。あなたの場合、完了するのに時間がかかるデータベースクエリです。

このような長いデータベース クエリ中に表示される一時的なレスポンシブフォームを実現するには、メイン スレッド内ですべての GUI 更新を実行する必要がありますSynchronize。これにはさまざまな方法がありますが、その詳細については説明しません。

VCL は複雑なライブラリであり、スレッドセーフではありません。複数のスレッドからアクセスできるあらゆるものとのすべての対話をスレッド保護する必要があります。また、それらのスレッドのそれぞれは、実装する保護メカニズムを尊重するように設計する必要があります。ただし、VCL にはスレッド保護の概念がなく、独自の考え方があります。Synchronizeしたがって、スレッドが何らかの命令をメインスレッドに送信する手順を常に尊重する必要があります。

あなたの場合、2 つの同期プロシージャを作成します:StartProcessStopProcess. たとえば、これらのプロシージャが呼び出されSynchronize(StartProcess);、プロセスが開始されたことをメイン スレッドに通知するイベントがトリガーされます。したがって、メイン スレッドは、長いプロセスを警告する一時ウィンドウを表示する必要があります。StopProcessクエリが完了したら、イベントを同期します。

表示したい実際のウィンドウに関しては、それは完全にあなた次第ですが、通常は長いプロセスを説明するために繰り返しのアニメーションがあります.

于 2014-04-22T05:50:52.727 に答える