看一下这样行不行:'先定义委托 Delegate Sub ScanEventHandler(ByVal string As String) '然后在类里面定义事件 Public Event JTCOM_IF_ScanEvent As ScanEventHandler '在需要的地方触发事件 RaiseEvent JTCOM_IF_ScanEvent(string)如果不行说一下,我再看看
修改了一下注释以及如何注册事件委托'先定义委托 Delegate Sub ScanEventHandler(ByVal string As String) '然后在Panalib.JTCOM_IF类里面定义事件 Public Event JTCOM_IF_ScanEvent As ScanEventHandler '在Panalib.JTCOM_IF类中需要的地方触发事件 RaiseEvent JTCOM_IF_ScanEvent(string) '最后在其他调用Panalib.JTCOM_IF的类中注册事件 AddHandler Panalib.JTCOM_IF.ScanEvent, AddressOf JTCOM_IF_ScanEvent
不可以啊,ScanEventHandler是SDK中已经定义好的Delegate Sub ScanEventHandler() 不带参数 Panalib.JTCOM_IF.ScanEvent也是SDK中已经定义好的事件 还有AddressOf 后面不能跟事件吧?不应该是定义的方法么?
昨天写的有点乱了,不好意思误导了你。AddressOf后面跟的是要调用的方法 好像你的写法本身(AddHandler Panalib.JTCOM_IF.ScanEvent, AddressOf JTCOM_IF_ScanEvent)没有问题,写成AddHandler Panalib.JTCOM_IF.ScanEvent, New ScanEventHandler(AddressOf JTCOM_IF_ScanEvent)也可以,这样你就看到了New ScanEventHandler。我写了个简单的测试代码,就是在一个窗口上放了格按钮,可以正常出发OnScan事件的(OnScan替换成你的项目中触发ScanEvent的方法)。你是不是没有这个方法,所以没执行啊? Public Partial Class MainForm Dim jtCom As New Panalib.JTCOM_IF() Public Sub New() ' The Me.InitializeComponent call is required for Windows Forms designer support. Me.InitializeComponent() 'AddHandler Panalib.JTCOM_IF.ScanEvent, New ScanEventHandler(AddressOf JTCOM_IF_ScanEvent) AddHandler Panalib.JTCOM_IF.ScanEvent, AddressOf JTCOM_IF_ScanEvent End Sub
Public Sub JTCOM_IF_ScanEvent() MessageBox.Show("Fired") End Sub
Sub Button1Click(sender As Object, e As EventArgs) jtCom.OnScan() End Sub End ClassModule Panalib Delegate Sub ScanEventHandler() Public Class JTCOM_IF Public Shared Event ScanEvent As ScanEventHandler Public Shared Sub OnScan() RaiseEvent ScanEvent() End Sub End Class End Module
谢谢啦,现在明白了,我现在自己定义了一个Delegate ,不过出现新问题了 就是我回调Delegate 里面的参数 给textbox赋值时出现错误 Control.Invoke must be used to interact with controls created on a separate thread.
Delegate Sub ScanEventHandler(ByVal string As String)
'然后在类里面定义事件
Public Event JTCOM_IF_ScanEvent As ScanEventHandler
'在需要的地方触发事件
RaiseEvent JTCOM_IF_ScanEvent(string)如果不行说一下,我再看看
Delegate Sub ScanEventHandler(ByVal string As String)
'然后在Panalib.JTCOM_IF类里面定义事件
Public Event JTCOM_IF_ScanEvent As ScanEventHandler
'在Panalib.JTCOM_IF类中需要的地方触发事件
RaiseEvent JTCOM_IF_ScanEvent(string)
'最后在其他调用Panalib.JTCOM_IF的类中注册事件
AddHandler Panalib.JTCOM_IF.ScanEvent, AddressOf JTCOM_IF_ScanEvent
不可以啊,ScanEventHandler是SDK中已经定义好的Delegate Sub ScanEventHandler() 不带参数
Panalib.JTCOM_IF.ScanEvent也是SDK中已经定义好的事件
还有AddressOf 后面不能跟事件吧?不应该是定义的方法么?
好像你的写法本身(AddHandler Panalib.JTCOM_IF.ScanEvent, AddressOf JTCOM_IF_ScanEvent)没有问题,写成AddHandler Panalib.JTCOM_IF.ScanEvent, New ScanEventHandler(AddressOf JTCOM_IF_ScanEvent)也可以,这样你就看到了New ScanEventHandler。我写了个简单的测试代码,就是在一个窗口上放了格按钮,可以正常出发OnScan事件的(OnScan替换成你的项目中触发ScanEvent的方法)。你是不是没有这个方法,所以没执行啊?
Public Partial Class MainForm
Dim jtCom As New Panalib.JTCOM_IF()
Public Sub New()
' The Me.InitializeComponent call is required for Windows Forms designer support.
Me.InitializeComponent() 'AddHandler Panalib.JTCOM_IF.ScanEvent, New ScanEventHandler(AddressOf JTCOM_IF_ScanEvent)
AddHandler Panalib.JTCOM_IF.ScanEvent, AddressOf JTCOM_IF_ScanEvent
End Sub
Public Sub JTCOM_IF_ScanEvent()
MessageBox.Show("Fired")
End Sub
Sub Button1Click(sender As Object, e As EventArgs)
jtCom.OnScan()
End Sub
End ClassModule Panalib
Delegate Sub ScanEventHandler()
Public Class JTCOM_IF
Public Shared Event ScanEvent As ScanEventHandler
Public Shared Sub OnScan()
RaiseEvent ScanEvent()
End Sub
End Class
End Module
谢谢啦,现在明白了,我现在自己定义了一个Delegate ,不过出现新问题了 就是我回调Delegate 里面的参数 给textbox赋值时出现错误 Control.Invoke must be used to interact with controls created on a separate thread.