1

ListViewコントロールの形式でUIログ(RichTextBoxコントロール)を絶えず更新するリアルタイムアプリケーションがあります。コントロールは、イベントを介して受信した現在のアプリケーションデータで更新されます。アプリケーションの実行速度が非常に遅く、ListViewログが更新されてUIスレッドがブロックされたことが原因であることがわかりました。ご想像のとおり、アプリケーションはユーザーに対して非常に反応が鈍いように見えます。

専用のUIスレッドでWPFウィンドウを起動できることは知っています。メインのUIスレッドがブロックされることなくウィンドウの残りの部分を更新できるように、独自のUIスレッドでWPFコントロールをホストできるかどうか疑問に思っていました。

これが不可能な場合は、このジレンマを改善するための代替案を推奨してください。

ありがとう!

4

2 に答える 2

0

コードを投稿していませんが、にバインドしてみませんListViewObservableCollection?コレクションを更新すると、コレクションが変更されたことをUIに通知するイベントが発生します。これにより、UIが更新されます。

これを行う方法については多くのチュートリアルがあります-そのようなものの1つはSwitchOnTheCodeにあります

于 2010-09-27T11:05:20.403 に答える
0

RichTextBoxは、定期的に更新するための高価なコントロールです。

独自のUIスレッドでWPFコントロールをホストすることはできません。

私の場合、Bindingしているオブジェクト(サードパーティのオブジェクト)に直接アクセスできないため、ObservableCollectionは機能しません。

最小限の変更で済む私の解決策は、UIログコントロールをListViewに基づいて作成することでした。ListViewは、VirtualisedStackPanelタグのおかげで、一括更新と定期更新用に最適化されています。

于 2010-09-28T10:30:31.387 に答える