none
アプリケーションの【応答なし】について RRS feed

  • 質問

  • みなさん、お世話になります。

    早速ですが、質問させて頂きます。

    例えば、タスクマネージャーの「アプリケーション」タブで【状態】確認しながら
    下記の様なソースを実行すると、間もなく【実行中】から【応答なし】になります。

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 1000;
            progressBar1.Minimum = 0;
            progressBar1.Value = 0;

            for (int i = 0; i < 1000; i++)
            {
                for (int j = 0; j < 10000000; j++)
                {
                    ;
                }

                progressBar1.Value++;
            }
        }

    以前、「制御がOSに戻るタイミングが無いため・・・」と言うような事を読んだ
    記憶があります。

    この辺りの事を知りたくて動きを確認した所、デバッガー上での動作とビルドした
    実行ファイルを動かした場合で、微妙に異なる事に気がつきました。

    デバッガー上:【応答なし】になるものの、プログレスバーは伸び続けます。
    実行ファイル:【応答なし】になると同時に、プログレスバーが伸びなくなり、
    更にマウスカーソルが【待ち】の状態(Win7の場合、輪っかがクルクル廻る)
    になります。

    何れの場合も、フォームをドラッグして移動する事はできませんし、他のフォームで
    乱されると再描画されません。

    最低でも、プログレスバーが最後までなめらかに伸びるようにしたいのですが、
    どう対処する必要があるのでしょうか。

    この辺りの事柄に付いて、ご教授下さいますよう、宜しくお願い致します。

    2011年1月17日 4:26

回答

すべての返信

  • 別スレッドで動作させる必要があります。以下を参考にしてみて下さい。

    時間のかかる処理をバックグラウンドで実行するには?[2.0のみ、C#、VB]
    http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年1月17日 4:40
    モデレータ
  • trapemiya さん、いつも有り難うございます。

    有用なURLを教えて頂き、有り難うございます。
    (本当は、自分で旨く探し出せるようにならないと・・・)

    具体的な例を示しての解説が書かれていて、ありがたいです。
    早速、時間を見つけて試してみます。

    具体的な疑問・質問が出てくれば、またお教えを請う事になるかと思いますが、
    その節には宜しくお願い致します。

    有り難うございました。


    追記

    その後、サンプルを参考にトライし、旨く行く事が確認できました。
    併せて、途中でキャンセルできるようにも出来ました。

    有用なURLをお教え頂き、有難うございました。
    今後とも、どうぞよろしくお願い致します。

    このスレッドは、これでクローズさせて頂きます。

    2011年1月17日 6:39