none
ループ中にボタンクリックイベントを取得、処理をしたい RRS feed

  • 質問

  •  

    タイトルの通りなのですが

    whileループ中に数秒おきに、ボタンがクリックされたかを判断し

    押されていたらクリックイベントの処理に移る

    という処理を行いたいのですが、方法がわかりません。

     

    わかりにくい説明で申し訳ありませんが

    ご教授下さいよろしくお願いします。

    2006年12月18日 6:13

回答

  •  ZGMF-X20-A さんからの引用
      現在フォームアプリケーションで開発しております。

    ついでに、OSやVSのバージョンまで明記したほうがよいでしょう。
    (特にVCの場合、環境によって出来る出来ないってのがたくさんありそうですし。)

    例)Windows Visuta Business/Visual Studio2005 SP1/CLR - Windows フォームアプリケーション


    つくりがよくわからないのですけれど。
    メッセージを拾うとかどういうことでしょうか?
    (どうやって拾っているかということ。ループで見ているだけ?)

    多分 DoEvents でボタンを受け付けれるようにして、終了かどうかの情報を持った変数かなんかで
    終了させることが出来るのでは。

    [C#,VBの例(C++/CLIのはWeb上にあんまりない)]
    時間のかかる処理をユーザーが停止できるようにする - DOBON.NET
    使っている関数はほぼ同じなので、C++/CLIに変換して対応してください。

     ZGMF-X20-A さんからの引用
    スレッドを使用した方がよろしいのでしょうか?

    まぁ、最終的に何をしたいのかによります。
    VS2005ならば、使ったことないけれど BackgroundWorker ってな便利なのがあるらしいけど。
    [C#,VBの例(C++/CLIのはWeb上にあんまりない)]
    バックグラウンド処理を途中でキャンセルするには? - @IT

    2006年12月18日 7:59

すべての返信

  • プロジェクトの種類は?
    Windows フォームアプリケーション?Win32 アプリケーション?

    どちらにせよ、ループをスレッド化するか、
    PeekMessage(もしくはDoEvents)あたりを使うことになりそうですが。
    2006年12月18日 6:17
  • 蒼の洞窟さんも触れていますが、逆の方がよいと思います。どんな処理かによりますが。
    ループの方を別スレッドで動かしておいて、ボタンクリック時にそのスレッドを停止もしくは休眠させた方が。
    2006年12月18日 7:03
  •  

    返信ありがとうございます

    現在フォームアプリケーションで開発しております。

    ループの中では外部からのメッセージを拾って、拾った時にカウントダウンしていき

    0になったらループ終了という流れです

    今回の件は中断ボタンを押された時に 反応をしたからです。

     

    現在、処理をマルチスレッドにすると、スレッドセーフ、アンセーフなどの知識がないものなので

    メインのみで同じ場所の同時参照などの問題も考えずに、メイン一本の処理だけで済ませようとしたのですが

    スレッドを使用した方がよろしいのでしょうか?

     

    2006年12月18日 7:49
  • そうですね。
    どこに処理を入れているのか分かりませんが、ループ中はボタンを押す事すら不可能ではないですか?
    2006年12月18日 7:57
  •  ZGMF-X20-A さんからの引用
      現在フォームアプリケーションで開発しております。

    ついでに、OSやVSのバージョンまで明記したほうがよいでしょう。
    (特にVCの場合、環境によって出来る出来ないってのがたくさんありそうですし。)

    例)Windows Visuta Business/Visual Studio2005 SP1/CLR - Windows フォームアプリケーション


    つくりがよくわからないのですけれど。
    メッセージを拾うとかどういうことでしょうか?
    (どうやって拾っているかということ。ループで見ているだけ?)

    多分 DoEvents でボタンを受け付けれるようにして、終了かどうかの情報を持った変数かなんかで
    終了させることが出来るのでは。

    [C#,VBの例(C++/CLIのはWeb上にあんまりない)]
    時間のかかる処理をユーザーが停止できるようにする - DOBON.NET
    使っている関数はほぼ同じなので、C++/CLIに変換して対応してください。

     ZGMF-X20-A さんからの引用
    スレッドを使用した方がよろしいのでしょうか?

    まぁ、最終的に何をしたいのかによります。
    VS2005ならば、使ったことないけれど BackgroundWorker ってな便利なのがあるらしいけど。
    [C#,VBの例(C++/CLIのはWeb上にあんまりない)]
    バックグラウンド処理を途中でキャンセルするには? - @IT

    2006年12月18日 7:59
  •  

    囚人さん

    蒼の洞窟さん

    ありがとうございます

     

    もっと詳細な開発環境も明記しないとですね

    色々至らない所をカバーして頂きありがとうございます。

     

    プログラムの方はBackgroundWorkerでがんばってみることにします!

     

     

    ご教授頂きありがとうございました!!

     

    2006年12月18日 8:44