Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自给定API的VB事件处理(从.NET转换)_C#_Asp.net_.net_Vb6 - Fatal编程技术网

C# 来自给定API的VB事件处理(从.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;

因此,我遇到了一个问题:试图将带有.NET编写的示例代码的API集成到用VB编写的遗留代码中,而我遇到的问题是事件。使用API的示例应用程序使用表单,但我试图在启动事件时在控制台应用程序中重复这一点。我需要实现许多不同的事件调用,但以下是一个示例: .NET呼叫:

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