<< 前へ        次へ >>

ID : 16377

AddHandler

機能

指定したプロバイダオブジェクトから、イベントを受取るメソッドの登録を行います。以降、プロバイダでイベントが発行されると、登録メソッドが呼ばれます。

構文

AddHandler オブジェクト, イベント名, イベント受取りメソッド

指定項目

オブジェクト
イベントを発行するオブジェクトを指定します。 AddControllerで取得したオブジェクトを指定します。
イベント名
受取りたいイベント名を文字列型データで指定します。通常は"OnMessage"を指定します。
イベント受取りメソッド
イベントを受取る処理メソッドを指定します。

解説

指定したプロバイダオブジェクトから、イベントを受取るメソッドの登録を行います。以降、プロバイダでイベントが発行されると、登録メソッドが呼ばれます。

このメソッドは次の書式である必要があります。

Sub メソッド名 (ByVal Sender As Object, ByVal Args As Variant)
  '...
End Sub

メソッド名は任意に指定できますが、可読性を向上させる意味で、イベント名と合わせることを推奨しています。その他の型は固定です。必ず上記規定の型を使用してください。

通常はメソッド名にOnMessageを指定し、メソッドは下記のように記述します。

Sub OnMessage (ByVal Sender As Object, ByVal Args As Variant)
'...
End Sub

プロバイダからのイベントの受取りが不要になったら、RemoveHandlerを呼び出して、終了処理を行います。

注意事項

  • イベントを受取るには、AddHandlerを実行したタスクが、実行し続けなくてはなりません。タスクが停止した場合は、イベントを受取ることはできません。
  • イベントの受取り待ちは、Waitコマンドでは行えません。必ず、適当なDelayコマンドがあるループコードで、行ってください。

用例

RC9プロバイダを使用し、RC9 コントローラのエラー通知や状態通知を受け取る例です。

Dim g_Counter As Integer = 0 '受取り個数

Sub Main()
    Dim ctrl As Object

    ctrl = Cao.AddController("RC9", "CaoProv.DENSO.RC9", "", "Server=192.168.0.1")
    g_Counter = 0

    '受取りイベント名と先の指定
    AddHandler ctrl, "OnMessage", OnMessage

    'イベントの受信待ちループ
    Do
        Delay 100
        If g_Counter >= 3 Then Exit Do
    Loop 

     '受取りの解除
    RemoveHandler ctrl

End Sub

'Event Handler for OnMessage
Sub OnMessage(ByVal Sender As Object, ByVal Args As Variant)
    Dim msg as object

    msg = Args(0) '::= CaoMessage object
    PrintDbg "" & Time & " - [EventNo = " & msg.Number & ", Value = 0x" & Hex(msg.Value) & "]"
    g_Counter = g_Counter + 1

End Sub

ID : 16377

<< 前へ        次へ >>