4

いくつかのデバイスを監視するアプリケーションがあります。デバイスに文字列を送信し、デバイスからテキストを受信できます。

必要なのは、デバイスが送受信したすべてのデータをログに記録するログファイル(.txtのみ)を作成することです。これは、アプリケーションでライブ表示する必要があります。

現在、私が行っているのは、ログをリッチテキストボックスに書き込み、そこからファイルに書き込むことです。しかし、GUIからバックエンドコード(デバイスとのインターフェイスとログファイルの作成)を分割したいと思います。これにより、デバイスとの通信インターフェイスの移植性が向上します。

このプロセスを検討していると、1つの問題に直面します。アプリケーションでログをライブで更新するにはどうすればよいですか。私はこのオプションを考えることができます:タイマーを作成し、時間間隔でGUIを更新します。しかし、これはひどい感じではありません。間にバッファがあり、バッファが変更された場合はGUIを更新すると便利です。

これを正しく行うためのヒントはありますか?

4

1 に答える 1

3

たぶん、ログコンテンツをIObservableにして、UIにその変更をサブスクライブさせることができますか?

もう1つのオプションは、INotifyPropertyChangedを実装し、PropertyChangedEventHandlerを使用して変更を通知することです。

NotifyPropertyChangedを使用してそれを行う方法を示すコードスニペットを次に示します。

using System.ComponentModel;
public class YourClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    protected void AddLogLine(String log)
    {
        // do your process
        NotifyPropertyChanged("Log");
    }
}

変更に登録するには、(UIコンストラクターで)次のようにします。

YourClassInstance.PropertyChanged += new PropertyChangedEventHandler(MyFunctionToHandleLogChanges);

注:YourClassInstanceを変更する場合は、ハンドラーを適切に削除して再度追加してください。

次に、UIを更新するには、UIクラスで次の手順を実行します。

void MyFunctionToHandleLogChanges(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "Log")
    {
        // Update UI
    }
}
于 2012-11-14T14:55:04.703 に答える