- ベストアンサー
C# スレッドでフォームを扱う
スレッドとフォームの連携について質問があります。 「開始」ボタンをクリックしたら、 「開始」ボタンのEnableをfalseにして 他のクラスのスレッドで処理を開始します (中断ボタンが押されたら処理をやめるためにスレッド採用) この時、処理が終わったら「開始」ボタンのEnableをtrueに戻したいのです。 デリゲートのコールメソッドを使ったところ、フォームを生成したスレッド以外からフォームををいじってはいけないというエラーがでてしまいました。 [a]ユーザー操作を待ち受けるフォームのスレッド [b]処理系のスレッド このようなスレッドの構成の時、[a]が[b]の処理が終わったことを知り、buttonのプロパティを変更するためには、どうすればよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> フォームを生成したスレッド以外からフォームををいじってはいけないというエラーがでてしまいました。 delegateを使ってるんですかね。でしょうねきっと。Invokeを使いましたか? Invokeメソッドによって簡単にスレッドの制御を引きわたせます。詳しくはWindows.Control.Invoke()を参照の事。
その他の回答 (1)
- jyuzou
- ベストアンサー率41% (97/231)
回答No.2
http://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_03.html コールバックメソッドの中でenableをtrueにすればOKだと思います。
質問者
お礼
ありがとうございます。 Invokeを使うことで解決できました。
お礼
ありがとうございました! Invokeでできました。 あと、Invokeで検索したところ、参考になるページも見つけることができました。 http://atmarkit-www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html ありがとうございます。