現在、C#,visual studioで開発しています。
ボタンをクリックすると処理を開始するのですが、その処理に時間がかかるため、何か処理中とわかるものを考えました。
ボタンが押される → ボタンのテキストを「処理中」に変更 → 処理 → ボタンのテキストを「ボタン」に変更
これで処理を行っている間は、ボタンのテキストが「処理中」になると思ったのですが、
1回目のみ、テキストが変更され、それ以降はテキストが変わりません。
なぜ、このようなことが起こるのでしょうか?
C#
1private void csvButton_MouseClick(object sender, MouseEventArgs e) { 2 if(e.Button == MouseButtons.Left) { 3 switch (docComboBox.SelectedIndex) { 4 case 0: 5 outputButton.Text = "処理中"; 6 Aggr01_Output(); //処理を行うメソッド 7 outputButton.Text = "ボタン"; 8 break; 9 } 10 }
実際の処理の流れとしては上記の通りです。
「Aggr01_Output」ではSQLに接続し、データを抽出し結果をdataGridViewに表示する。といった処理を行っています。
デバッガを使ってステップ実行し、1 回目と 2 回目のフローが同じになっているか、調べてください。
デバッガでステップ実行してみたところ、値としては変わっていました。
しかし、実際の表示は変わっていませんでした。
そうすると、2 回目は Aggr01_Output が瞬時に完了してしまうので、実際は変わっているが、見かけ変わってないように見えるということぐらいしか思い当たることがないです。 その疑いがあるなら、Aggr01_Output は実際の処置ではなく Thread.Sleep(5000) とかにして試すとかしてみませんか。
私もその可能性を疑いましたが、処理を行う度にUIが止まるので可能性としては低いのかなと思います。
私なりに調べたところ、重たい処理によってその前の描画処理も止まってしまう。というのが可能性として考えられるのかなと思います。
また、他の回答者様からその解決につながるヒントを頂けましたので参考程度にし、もう少し調べてみようと思います。
どうもありがとうございました。