• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#の処理をリアルタイムに表示させる方法)

C#でリアルタイムに処理結果を表示する方法

このQ&Aのポイント
  • C#で処理結果をリアルタイムに表示させる方法について説明します。現在、visual C#を勉強中で時間のかかる処理を作っている際に、結果が表示されないことに困っています。forやforeachのループ内でデータを表示する方法や一時停止する方法についても解説します。
  • C#でリアルタイムに処理結果を表示させる方法について説明します。時間のかかる処理を作成している際に、すべての結果を待たずに逐次表示させたい場合は、forやforeachのループ内でデータを表示することができます。また、処理途中で一時停止するためには、適切な制御文を利用する必要があります。
  • C#で処理結果をリアルタイムに表示させる方法について説明します。時間のかかる処理を作成している場合でも、forやforeachのループ内でデータを逐次表示させることが可能です。また、処理途中で一時停止するためには、適切な条件文を利用することが重要です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

とりあえず,一番簡単そうなのは ・イベントハンドラをasyncにする ・処理部分をasyncなメソッドに切り出す ・処理部分をawaitつきで呼び出す 方法でしょうか (VS 2012以降)。 または,.NET Framework 2.0以降用ですが,BackgroundWorkerを貼り付けて, ・WorkerReportsProgressプロパティをTrueにする ・DoWorkイベントデータ処理コードを書き,ループごとにReportProgressを呼び出す ・ProgressChangedイベントでデータをlistView1に設定する というのもありだと思います。 一時停止は,UIから要求するものの場合だと,ManualResetEventのインスタンスを用意して,最初にSetしておき, ・処理部分の最初でWaitメソッドを呼び出す ・一時停止を要求するタイミングでResetメソッドを呼び出し,解除するタイミングでSetメソッドを呼び出す で対処できます。 ANo.2さんの書かれているApplication.DoEventsは,長時間処理の対策として推奨されません。 MSDN: Application.DoEvents メソッド (System.Windows.Forms) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.doevents(v=vs.100).aspx ※解説の「注意」を参照。

macus
質問者

お礼

Application.DoEventsは長時間処理だとダメなんですね! ありがとうございます。

その他の回答 (3)

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.3

開発途中で確認したいのではなく、そういう機能を持たせたいという事なんでしょうか?でしたら割り込み処理を調べてください。ボリューム的にここでは難しいです。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

一時停止用にチェックボックスを追加します カウント中断用の変数をフォームクラスに追加します ... bool bFlag; FormClosingイベントで bFlag = True; として カウント中断の判断とします カウントアップイベントで for ( int i =0; i < 10000; i++ ) {   ListView1.Items.Add(データ);   do   {     // Windowsに未処理のメッセージを処理させる     Application.DoEvents();     // 自処理でCPUを占有しないようにするため     System.Threading.Thread.Sleep(10);     // カウント中断の判定     if ( bFlag )       return;   }   while(checkBox1.checked); } といった具合で …

macus
質問者

お礼

お返事ありがとうございます。 やってみたのですが・・・ 処理中はフォーム自体を触ることができませんでした。。。

macus
質問者

補足

すみません。私の勘違いでした。 リアルタイム表示&一時停止が出来ました!! ありがとうございます!!!

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

古くからやるのはconsolewritelineで値をコンソールあるいは出力ペインに出力させる。 出も面倒なので、デバックし、ステップ実行をする方が楽。 F11でステップ実行する。長い処理の場合ずっとF11押すのは大変。途中で止めたい場所。たぶん } の行の先頭のスペースをクリックすると赤い丸が付く。 F5を押すとプログラムはステップではなく続行されるがその赤い丸(ブレークポイント)で止まる。 その時の値は見たい変数にカーソルをあてると階層でみれる。 またすべての値をみるにはローカルビューを見る。メニューのデバックのなかにローカルって画面がある。 読み込まれたすべての格納情報が見れる。F5を押すたびにそこで止まる。赤い丸はもう一度クリックで解除される。

macus
質問者

お礼

ご回答ありがとうございます。 自動で処理していきたいため、何か操作をせずに リアルタイムに表示してほしいです。 リアルタイムにデータが表示されていって、 たまに観た時に、気になるデータがあったら 一時停止して観るみたいな感じにしたいです。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう