• ベストアンサー

C# スレッドでフォームを扱う

スレッドとフォームの連携について質問があります。 「開始」ボタンをクリックしたら、 「開始」ボタンのEnableをfalseにして 他のクラスのスレッドで処理を開始します (中断ボタンが押されたら処理をやめるためにスレッド採用) この時、処理が終わったら「開始」ボタンのEnableをtrueに戻したいのです。 デリゲートのコールメソッドを使ったところ、フォームを生成したスレッド以外からフォームををいじってはいけないというエラーがでてしまいました。 [a]ユーザー操作を待ち受けるフォームのスレッド [b]処理系のスレッド このようなスレッドの構成の時、[a]が[b]の処理が終わったことを知り、buttonのプロパティを変更するためには、どうすればよいでしょうか?

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

> フォームを生成したスレッド以外からフォームををいじってはいけないというエラーがでてしまいました。 delegateを使ってるんですかね。でしょうねきっと。Invokeを使いましたか? Invokeメソッドによって簡単にスレッドの制御を引きわたせます。詳しくはWindows.Control.Invoke()を参照の事。

ohnotellme
質問者

お礼

ありがとうございました! Invokeでできました。 あと、Invokeで検索したところ、参考になるページも見つけることができました。 http://atmarkit-www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html ありがとうございます。

その他の回答 (1)

  • jyuzou
  • ベストアンサー率41% (97/231)
回答No.2

http://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_03.html コールバックメソッドの中でenableをtrueにすればOKだと思います。

ohnotellme
質問者

お礼

ありがとうございます。 Invokeを使うことで解決できました。

関連するQ&A