2

修正方法や対処方法がよくわからないという奇妙な問題があります。私はミニテキストエディタスタイルのアプリケーションを書いています-RichTextBoxエディタ。

選択範囲が変更された後、複雑な解析を行う必要があります。位置、選択範囲のテキスト、および領域周辺のテキストのコンテキストに関するその他のさまざまなビットを更新します。

少し処理が必要なので、ユーザーが矢印キーでスクロールしている場合、選択が変更されるたびに起動したくありません。Application.Idleを使用することを考えましたが、定期的に起動しすぎます。タイマーを試しましたが、選択矢印が動いているときに発火する場合があります。

私が考えていたのは、RichTextBox SelectionChangedイベントが発生するたびにタイマーをリセットし、タイマーが500ミリ秒または1000ミリ秒に達すると、複雑な処理の実行を実行する、カウントダウンタイマーのようなユーティリティでした。

これは良い考えのように聞こえますか?

4

1 に答える 1

4

時間がかかりすぎる場合は、おそらく独自のスレッドで処理を開始する必要があります。新しい入力を取得したらすぐに、前の計算を停止して新しい情報からやり直すことができます(したがって、スレッドのキャンセルメカニズムを検討してください)。

スレッドが完了したら、その結果が有効かどうかを確認する必要があります(その間に選択は変更されませんでした)。最後に、計算結果をGUIに「同期」することができます。これは、うまくいけば十分に高速です:)

これは、GUIに書き込まずに実行できる計算がある程度ある場合にのみ機能します...この方法で実装できるかどうかはわかりません。計算の種類によって異なります。

于 2010-06-10T12:02:50.547 に答える