C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Textで実際にFormに描画されるまで


(過去ログ 82 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■48812 / inTopicNo.1)  Textで実際にFormに描画されるまで
  
□投稿者/ Jem (1回)-(2010/04/14(Wed) 21:30:02)

分類:[C#] 

環境:Visual C# 2008 (Windows 7 professional)

はじめまして、Jemといいます。

現在Windowsアプリケーションを作成しているのですが、AppendTextで困っています。
TwitterのStreaming APIのように延々と流れ続けるデータをForm上にテキスト表示したいのですが、
うまくいきません。
ステップインで調べてみると、実際にForm上に描画されるのはbutton1_Click内の処理がすべて
終わってからということが分かりました。

例えば下記のようなソースのとき、逐次Formに表示していくにはどうすればよいのでしょうか?
わかりにくい質問で申し訳ありません。よろしくお願いします。


private void button1_Click(object sender, EventArgs e)
{
appendText();
}
private void appendText(){
while (true)
{
richTextBox1.AppendText("hoge");
//richTextBox1.Text += "hoge";
}
}
引用返信 編集キー/
■48814 / inTopicNo.2)  Re[1]: Textで実際にFormに描画されるまで
□投稿者/ 魔界の仮面弁士 (1621回)-(2010/04/14(Wed) 22:08:07)
No48812 (Jem さん) に返信
> 例えば下記のようなソースのとき、逐次Formに表示していくにはどうすればよいのでしょうか?

そのソース中の無限ループ処理が、実際にはどのようなコードであるのかにもよりますが、
こういう方法は如何でしょう。

 void Button1_Click(…
 {
  backgroundWorker1.RunWorkerAsync(引数);
 }
 void backgroundWorker1_DoWork(…
 {
  BackgroundWorker worker = (BackgroundWorker)sender;
  while(…)
  {
   worker.ReportProgress(0, "新しいデータ");
   Thread.Sleep(432);
  }
 }
 void backgroundWorker1_ProgressChanged(…
 {
  richTextBox1.AppendText(string.Format("{0:HH:mm:ss.ffff}, {1}\r\n", DateTime.Now, e.UserState));
 }
引用返信 編集キー/
■48821 / inTopicNo.3)  Re[2]: Textで実際にFormに描画されるまで
□投稿者/ Jem (2回)-(2010/04/14(Wed) 23:46:03)
No48814 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士 さん、ありがとうございます!
なるほど、スレッドを使うとうまくいきますね。期待通りに動いてくれました。



> ■No48812 (Jem さん) に返信
>>例えば下記のようなソースのとき、逐次Formに表示していくにはどうすればよいのでしょうか?
>
> そのソース中の無限ループ処理が、実際にはどのようなコードであるのかにもよりますが、
> こういう方法は如何でしょう。
>
>  void Button1_Click(…
>  {
>   backgroundWorker1.RunWorkerAsync(引数);
>  }
>  void backgroundWorker1_DoWork(…
>  {
>   BackgroundWorker worker = (BackgroundWorker)sender;
>   while(…)
>   {
>    worker.ReportProgress(0, "新しいデータ");
>    Thread.Sleep(432);
>   }
>  }
>  void backgroundWorker1_ProgressChanged(…
>  {
>   richTextBox1.AppendText(string.Format("{0:HH:mm:ss.ffff}, {1}\r\n", DateTime.Now, e.UserState));
>  }
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -