GUI のテキスト ボックスBackgroundWorker
を使用してメッセージを投稿するスレッドがあります。テキスト ボックスにテキストを表示するBeginInvoke
メソッド は、 を使用し、テキストを に書き込みます。 write_debug_text
AppendText
Console
のBackgroundWorker
書き込み速度が速すぎて、write_debug_text
が追いついていないようです。ブレークポイントを設定し、write_debug_text
ヒットするまで長い時間待たなければなりません。ブレークポイントに到達する前に、BeginInvoke の呼び出しが多数発生します。
System.Console
VS C# Express IDE のように、UI にメッセージをリアルタイムで表示する方法を探しています。
SO での検索から、それAppendText
が使用するより高速な方法であり、文字列を再割り当てする必要がある場合があることを理解しています。
一部の返信はStringBuilder
、そのテキストをテキストボックスに定期的に書き込むことを提案しています。ただし、これにはさらにイベントとタイマーを追加する必要があります。私はむしろやりたくないことです (私の単純なアプリケーションはますます複雑になっています)。
テキストボックスにリアルタイムで書き込む (そして表示させる) にはどうすればよいですか?
私の現在の考えは、テキスト キューとタイマーを使用する Textbox から継承するウィジェットを作成することです。
編集 1: サンプル コード
ここに私のコードの断片があります:
private m_textbox;
//...
m_textbox.BeginInvoke(new write_debug_text_callback(this.write_debug_text),
new object[] { debug_text });
return;
private void write_debug_text(string text)
{
string time_stamp_text = "";
time_stamp_text = DateTime.Now.ToString() + " ";
time_stamp_text += text;
m_textbox.AppendText(time_stamp_text);
m_textbox.Update();
System.Console.Write(time_stamp_text);
return;
}
に変更しようとしBeginInvoke
ましたがInvoke
、アプリケーションがハングしました。デバッガーを使用して一時停止/中断すると、実行ポインターは への呼び出しにありInvoke
ます。
ところで、私は Java、C++、および C で長年の経験があります。C# を使用して 5 か月目です。