C# 来自给定API的VB事件处理(从.NET转换)
因此,我遇到了一个问题:试图将带有.NET编写的示例代码的API集成到用VB编写的遗留代码中,而我遇到的问题是事件。使用API的示例应用程序使用表单,但我试图在启动事件时在控制台应用程序中重复这一点。我需要实现许多不同的事件调用,但以下是一个示例: .NET呼叫:C# 来自给定API的VB事件处理(从.NET转换),c#,asp.net,.net,vb6,C#,Asp.net,.net,Vb6,因此,我遇到了一个问题:试图将带有.NET编写的示例代码的API集成到用VB编写的遗留代码中,而我遇到的问题是事件。使用API的示例应用程序使用表单,但我试图在启动事件时在控制台应用程序中重复这一点。我需要实现许多不同的事件调用,但以下是一个示例: .NET呼叫: ReplyInteract.BaseConnection conn = new ReplyInteract.BaseConnection(); conn.BaseOnLine += Conn_BaseOnLine;
ReplyInteract.BaseConnection conn = new ReplyInteract.BaseConnection();
conn.BaseOnLine += Conn_BaseOnLine;
这是电话
private void Conn_BaseOnLine(int BaseID, int BaseState)
{
string status = "";
switch (BaseState)
{
case 1: status = "Connected:Status 1"; txtCurrentBaseID.Text = BaseID.ToString(); break;
case 0: status = "Connection failed or closed: Status 0"; break;
case -1: status = "Connectiontype not supported:Status -1"; break;
case -2: status = "Invalid Base ID: Status -2"; break;
case -3: status = "No base connected or the usb port is occupied: Status - 3"; break;
case -5: status = "Basestation busy with another application. Please disconnect first";break;
case -6: status = "No Reply Interact Base station. Does not work with the Interact API";break;
default: status = BaseState.ToString(); break;
}
writeDebug("Base ID: " + BaseID.ToString() + " >> Status: " + status);
}
我不习惯用VB编程,但下面是我在VB中复制的尝试
Dim WithEvents conn As New ReplyInteract.BaseConnection
AddHandler conn.BaseOnLine, AddressOf Conn_BaseOnLine
现在我不知道如何真正启动这个活动有什么想法吗?下面是我目前拥有的完整vb代码
Module Module1
Dim WithEvents conn As New ReplyInteract.BaseConnection
Dim mg As New ReplyInteract.BaseManage
Sub Main()
While (True)
conn.BaseIP = "200.0.0.251"
Dim BaseOnLine As String
conn.Open(1, "1")
conn.License = "****"
AddHandler conn.BaseOnLine, AddressOf Conn_BaseOnLine
End While
End Sub
Public Sub Conn_BaseOnLine(ByVal BaseID As Integer, ByVal BaseState As Integer)
Dim status As String
Select Case BaseState
Case 1 : status = "Connected:Status 1"
Case 0 : status = "Connection failed or closed: Status 0"
Case -1 : status = "Connectiontype not supported:Status -1"
Case -2 : status = "Invalid Base ID: Status -2"
Case -3 : status = "No base connected or the usb port is occupied: Status - 3"
Case -5 : status = "Basestation busy with another application. Please disconnect first"
Case -6 : status = "No Reply Interact Base station. Does not work with the Interact API"
Case Else
status = BaseState.ToString()
End Select
End Sub
VB6中没有
AddHandler
。您必须使用with events
(您已经这样做了)声明变量,并且可以直接使用代码窗口顶部的下拉列表从IDE添加事件处理程序。将生成一个空事件处理程序,并将其命名为objectname\u eventname。您当前拥有的,Public Sub Conn_BaseOnLine(ByVal BaseID为整数,ByVal BaseState为整数)
看起来不错,但您可以再次检查IDE是否将其作为对象的事件处理程序
看一看,了解一些额外的细节 请看msdn异步客户端示例。该示例使用socket,但您可以用继承socket的任何类(如TCPClient)替换socket。请参阅:这似乎标记不正确-应该是
vb.net
。这段代码不会用VB6编译。除了Etienne指出AddHandler外,还有一个对整数的ToString方法调用,VB6不支持模块中的WithEvents(仅支持窗体和类)。
Module Module1
Dim WithEvents conn As New ReplyInteract.BaseConnection
Dim mg As New ReplyInteract.BaseManage
Sub Main()
While (True)
conn.BaseIP = "200.0.0.251"
Dim BaseOnLine As String
conn.Open(1, "1")
conn.License = "****"
AddHandler conn.BaseOnLine, AddressOf Conn_BaseOnLine
End While
End Sub
Public Sub Conn_BaseOnLine(ByVal BaseID As Integer, ByVal BaseState As Integer)
Dim status As String
Select Case BaseState
Case 1 : status = "Connected:Status 1"
Case 0 : status = "Connection failed or closed: Status 0"
Case -1 : status = "Connectiontype not supported:Status -1"
Case -2 : status = "Invalid Base ID: Status -2"
Case -3 : status = "No base connected or the usb port is occupied: Status - 3"
Case -5 : status = "Basestation busy with another application. Please disconnect first"
Case -6 : status = "No Reply Interact Base station. Does not work with the Interact API"
Case Else
status = BaseState.ToString()
End Select
End Sub