1

私のWPFアプリケーション用に、仮想キーボードを開発しました。私の開発マシンでは問題なく動作します。ただし、低速のマシンでは、ボタンのクリック応答が遅くなります。ボタンがクリックされた後、表示がボタンダウン状態とボタンイベントで更新されるまでに遅延があります。この遅延を取り除くにはどうすればよいですか?問題はWPF表示の問題ですか?

遅いのはイベントハンドラーだと思って、キーボードのキーが押されたイベントを送信するためにいくつかのアプローチを試しました。私が何を試しても、相互作用はまだ遅いです。現在使用しているもの:

SendInput(uint nInputs, ref INPUT pInputs, int cbSize);

user32.dllからインポートされます。私のイベントハンドラーは、上記の関数のパラメーターを作成して呼び出すだけのところまで単純化されています。

私も以下を使用してみましたが、これ以上のパフォーマンスはありませんでした。

 System.Windows.Input.Keyboard.FocusedElement.RaiseEvent(...)

どうすれば遅延を取り除くことができますか?

4

3 に答える 3

3

遅延の原因を教えてください。

Clickイベントで何か遅いことがある場合は、別のコードを使用Threadしてコードを実行することをお勧めします。新しいスレッド内で、UIスレッドで実行する必要のあるコードがあるDispatcher.BeginInvoke場合は、UIに処理時間があるときに実行されるように、コードをキューに入れます。UIの応答性を維持するには、重いコードをメイン(UI)スレッドから遠ざける必要があります。

仮想キーボードが特定のローカルである場合Window、実行していることの複雑さに応じて、フォーカスのあるキーボード文字を手動で入力するという、過去に使用したアプローチを採用できます。TextBox

免責事項:私は2年以上前にそのコードを書いたので、結果としてそれを嫌っています。私は通常それが存在しなかったふりをしますが、それはあなたを助けるかもしれません。それ以来、私はそれを改善してきましたが、コンセプト自体には、低速のマシンでのパフォーマンスの問題はありませんでした。あなたが最も嫌うコードについてのJeffAtwoodのブログを引用したいのですが、まあ...

編集:空でもまだ問題がClickあるので、他の潜在的な停滞を調べたいと思うかもしれません。ユーザーのCPUは何かから100%で最大になっていますか?アニメーションが重すぎるのか、それとも別の潜在的なイベントですか?ほとんどのUI遅延は、通常、CPUが最大になったか、UIのスレッドでイベントに時間がかかりすぎることが原因です。

1つの可能性は、Window通常AllowsTransparency="True"はグラフィックカードにかかるワークロードの多くがソフトウェアでレンダリングされるようになり、パフォーマンスが大幅に低下する可能性がある場合です。それを過ぎると、処理を高速化する可能性のあるいくつかの一般的なヒントについて、WPFアプリケーションパフォーマンスの最適化に関するこのMicrosoftの記事を参照できます。

XAMLで開発している人は、その最後の記事を読むことをお勧めします。の使用や実装などの細部のパフォーマンスの違いは、実際に合計することができ、それぞれに対してベンチマークを実行するという事実は、適切な設計の重要性を実際に示していますTextBlockLabelDependencyPropertyINotifyPropertyChanged

于 2009-12-11T22:21:10.313 に答える
2

ちょうどこの議論に出くわしました。ボタンの応答が遅いWinFormsアプリケーションがあります。これは、64ビットのWindows 7にアップグレードした後に発生しました。プロジェクトのターゲットを(「任意のCPU」ではなく)「x86」に変更すると、遅いボタンの応答がなくなることがわかりました。

于 2012-12-21T18:12:25.213 に答える
1

イベントハンドラーの終了に時間がかかる場合は、その間UIがロックされます。このイベントハンドラーを試してください:

  private void button1_Click(object sender, RoutedEventArgs e)
  {
     System.Threading.Thread.Sleep(5000);
  }

イベントハンドラーは、おそらくより高速なマシンでより速く終了します。動作が遅い場合は、作業を別のスレッドにプッシュすることをお勧めします。

于 2009-12-11T22:16:42.070 に答える