DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33395 / inTopicNo.1)  イベントハンドラ内でのメソッド呼び出し
  
□投稿者/ まりもん 一般人(31回)-(2016/06/24(Fri) 09:46:23)
  • アイコン環境/言語:[VisualBasic2008〜2013] 
    分類:[.NET] 

    あるユーザーコントロールがあり、このコントロールは外部と通信を行います。
    通信の結果、このコントロールの状態が変化し、その変化はイベントで通知されます。
    この状態変化のイベントでこのコントロールのメソッドを呼び出し、次の処理を行いたいのですが、
    このコントロールの仕様として、イベントハンドル内では当コントロールのメソッド、プロパティは呼び出さないでください
    というものがありまして
    どのように呼び出すべきなのかご意見をお聞かせください。
    
    
    Private Sub UserControl1_EventA(sender As Object, e As UserControlEventArgs) Handles UserControl1.EventA
    
        If e.Status = 1 Then
            'UserControl1.ProcA()    '@
            Timer1.Enable = True     'A
        End If
    
    End Sub
    
    Private Sub Timer1_Elapsed(sender As Object, e As ElapsedEventArgs) Handles Timer1.Elapsed
        Timer1.Enable = False
        UserControl1.ProcA()
    End Sub
    
    本来であれば、@のように呼び出したいのですが、仕様によりイベントハンドラ内で
    @のように呼び出すことができません。
    現在はAのようにタイマーを起動し、そのタイマーイベント内で呼び出す作りにしています。
    ユーザーコントロールは当方の管理外で変更依頼を出すこともできません。

引用返信 削除キー/
■33396 / inTopicNo.2)  Re[1]: イベントハンドラ内でのメソッド呼び出し
□投稿者/ Hongliang 大御所(516回)-(2016/06/24(Fri) 10:32:18)
  • アイコンなぜ「イベントハンドル内では当コントロールのメソッド、プロパティは呼び出さないでください」という仕様になっているのか分からないことには回答しようがありません。
    真っ先に思いつくのは別スレッドでイベントハンドラが実行されるから、ですが、ほんとにそのためなのかどうか判断できません(これが理由なら対象はそのコントロールに限らなくなるので違う可能性がむしろ高い)。
    現在提示されている情報からは、タイマぐらいでしょうね。
    // BeginInvokeはいけるかもしれないけど仕様に抵触する。
引用返信 削除キー/
■33397 / inTopicNo.3)  Re[2]: イベントハンドラ内でのメソッド呼び出し
□投稿者/ まりもん 一般人(32回)-(2016/06/24(Fri) 14:36:49)
  • アイコンありがとうございます。

    当方でもなぜそういう仕様になっているのか分かりませんので、これ以上詳しい情報が
    出せません。

    現状通り、タイマでの呼び出し方法にしようと思います。


    > なぜ「イベントハンドル内では当コントロールのメソッド、プロパティは呼び出さないでください」という仕様になっているのか分からないことには回答しようがありません。
    > 真っ先に思いつくのは別スレッドでイベントハンドラが実行されるから、ですが、ほんとにそのためなのかどうか判断できません(これが理由なら対象はそのコントロールに限らなくなるので違う可能性がむしろ高い)。
    > 現在提示されている情報からは、タイマぐらいでしょうね。
    > // BeginInvokeはいけるかもしれないけど仕様に抵触する。
解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -