• ベストアンサー

『動作中』の表記

VB2010にてシステム構築しています。 あるボタンでさせる作業が結構長く『動作中』がみんなにわかるように 処理ボタンを押したらそのボタンのTextを赤字で『動作中』としたいのですがどうしたらいいですか? 普通にButton.ClickのSUB内にコードを書いても動かないので別のものを使用しないといけないんですかね? よろしくお願いします

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

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

長時間処理がかかる場合は,イベントハンドラ内で全部を処理してはいけません。 長時間の処理は,スレッドを作って別スレッドで処理させます。 簡単な方法としては,BackgroundWorkerを使う方法があります。 FormにBackgroundWorkerを貼り付けておいて, ・ボタンのクリックイベントでは,UIの事前処理(ボタンのEnabledをFalseにしたり,Textを変更したりするような処理)を行い,BackgroundWorkerのRunAsyncメソッドを呼び出す。 ・BackgroundWorkerのDoWorkイベントに,処理の本体を書く。UIスレッドではないため,UI要素へのアクセスは厳禁 ・BackgroundWorkerのProgressChangedイベントには,ReportProgressメソッドを(DoWorkイベントハンドラ内から)呼ばれた時に処理したいことを書く。このイベントはUIスレッドで動くため,UI要素へのアクセスが可能。WorkerReportsProgressプロパティをTrueにする必要あり ・BackgroundWorkerのRunWorkerCompletedイベントには,DoWorkイベントの処理が終了した時に行いたい処理を書く。このイベントはUIスレッドで動くため,UI要素へのアクセスが可能なので,UIへの事後処理が可能(ボタンのEnabledをTrueにするなど)。 という風にします。 MSDN: BackgroundWorker クラス http://msdn.microsoft.com/ja-jp/library/4852et58.aspx 他にもスレッドを使う方法は色々ありますが,UIへの変更処理の都合を考えると,BackgroundWorkerが使いやすいです。

Alshark
質問者

お礼

とても解り易く解説していただき、ありがとうございます。 大変勉強になりました。 今まですべての処理を一つのコントロールで行っていたので 処理にだいぶ時間がかかっていました。 おかげさまで、動作が他者にわかりやすくなりました。

関連するQ&A

専門家に質問してみよう