0

私はFlex4アプリを持っていますが、これは時々多くの処理を行う必要があり、ユーザーはそれが完了するまで数秒待つことになります。Flexでは、カーソルマネージャを介してビジーカーソルを設定および削除できます。私はそれを次のように使用しています:

CursorManager.setBusyCursor();    // add busy cursor
// execute lengthy processing here; e.g. switch to a new screen with a lot of layout
CursorManager.removeBusyCursor(); // remove busy cursor

ただし、実際には、特定の状況では、ビジーカーソルが表示されないか、表示されている場合は、カーソルが削除される直前に表示されます(点滅すると見逃してしまいます)。アイデアは、処理が完了してからほんの一瞬ではなく、長い処理が行われている間、ビジーカーソルを表示することです。

したがって、長い処理ステップを実行する前に、ビジーカーソルが常に表示されるようにするために使用できるデザインパターンがあるかどうか疑問に思います。たとえば、これらの処理手順は、(1)複雑なレイアウトを持つ、構築する必要のある新しい画面への移行、または(2)レンダリングに時間がかかるグラフの作成などです。

Flexで設計している人は、いつかこれに遭遇したのではないかと思います。使用できる一般的なデザインパターンはありますか、それとも、適切なタイミングで表示されるように、ビジーカーソルをどこで実行するかを正確に把握するのは毎回ユニークな冒険ですか?アドバイスをいただければ幸いです。

4

1 に答える 1

1

問題は、あらゆる種類の「長時間の処理」によってUIがフリーズし、画面を更新する機会がないため、計算を開始する前にカーソルの変更が表示されないことです。

できることはいくつかありますが、詳細を説明する前に、最初からフリーズが発生しないようにするのが最善です。これは、次の2つの方法のいずれかで実行できます。現在のフレームレートよりも速く完了するようにアルゴリズムを十分に最適化するか、長い計算を小さなチャンクに分割してリソースを「拡散」するように計算を変更します。複数のフレームにまたがる集中的なループ-そしてその間に画面を更新できるようにします。現在のFPバージョンではそのためのワーカーを使用でき、古いバージョンでは疑似スレッドを使用できます。

すばやく結果を得るには、カーソルを変更したsetTimeout、を使用して重いプロセスを100ミリ秒遅らせるだけです。そうすれば、計算が始まる前に画面を更新できます。

于 2013-02-07T01:16:09.377 に答える