2011-05-23 9 views
0

私はシャープな初心者ですが、私の最初のプロジェクトはシリアルポートのターミナルアプリケーションです。受信データはASCII文字で、115 kbaudが付いています。シリアルポートの受信文字列をテキストボックスに追加するにはどうすればよいですか?

これで、受信した各行をwpfテキストボックスにバインドします。私のシリアルポートクラスでは、IPropertyChangedイベントを使用し、各受信ラインをテキストボックスにバインドすることに成功しました。しかし、1行だけを見るだけでは満足できません。テキストボックスの内容は、それぞれの入力行に追加する必要があります。私はシリアルポートクラスの文字列を集めて、それぞれ新しいものと一緒にすべてをもう一度送ってはいけません。私は試してみましたが、結果は非常に遅かったです。

次私は結合事象を使用しようとしたが、textbox.AppendText(incomingline)を使用するTargetUpdated ...

<TextBox 
Name="textBoxIncoming" 
Text="{Binding Path=Incoming, Mode=OneWay, NotifyOnTargetUpdated=True}" 
DataContext="{Binding NotifyOnTargetUpdated=True}" 
IsReadOnly="True" 
TargetUpdated="textBoxIncoming_TargetUpdated" 
... />` 

結果は、各入力行がある行の前に、テキストボックスに2回表示されるということでしたクリアされました。

wpfバインディングでテキストボックスにテキストを追加する方法を知っている人はいますか?

答えて

0

これは、バインディングだけでは実行できません。代わりに、受け取ったすべての行を追加するリストを作成します。 Incomingプロパティを変更してstring.Join(Environment.NewLine、listOfReceivedStrings)を返します。

+0

私はすべての前の行(100と言う)を新しい受信行と一緒に更新すると、パフォーマンスが低下すると思います。新しいラインはちょうど約1ミリ秒ごとに来ます。今私は自己定義イベントLineReceivedテキストをテキストボックスに追加しようとしました。しかし、これは私をクロス・スプレッド・トラブルに導いた。そこで私はwpfディスパッチャーBeginInvokeを呼び出して、改行をテキストボックスに追加します。しかしこれは同じように遅かった。 –

+0

あなたの解決策は正しいですし、基本的にTextBoxで入手するのが最も速いです。テキストボックスには極端な量のテキストが含まれていません。次のステップは、リストを使ってみる(アイテムを追加する)か、カスタム描画コードを実行することです。 – usr

関連する問題