订阅COM对象中的事件将被忽略

时间:2018-01-04 02:33:25

标签: c# events vbscript com event-handling

在一个类中,我有一个构造函数,它接收一个需要初始化的SerialPort对象。作为初始化的一部分,订户方法被添加到DataReceived事件中。当它作为标准Windows窗体应用程序执行时,它按预期工作。

但是我也将把这个类用作可以从VBScript调用的COM对象。

我的问题是,当我将代码作为Windows窗体应用程序运行时,它运行良好。但是当它被用作COM对象时,订阅者方法被“忽略”。

为了测试这个,我添加了一些messagebox.show()次来电,我得到的结果如下。

当作为Windows Forms App运行时,我会看到“Set subscriber method”消息,当在串口上收到数据时,我会看到“Found data”消息。 当作为COM对象调用时,我会看到“设置订阅者方法”消息,但不会看到“找到数据”消息。

我的想法已经用完了,我在网上找不到任何可以建议订阅COM对象中的事件应该与订阅Windows窗体应用程序中的事件不同的东西。

我在这里错过了什么吗?

//Constructor
public RFIDBoard(SerialPort mSerialPort)
{
    UUIDonBoard = new byte[SetUpValues.NUM_BYTES_IN_RFID_UUID];
    HoldsAProductRFID = false;
    sp = mSerialPort;
    sp.BaudRate = 9600;
    sp.StopBits = StopBits.One;
    sp.Parity = Parity.None;
    sp.DataBits = 8;
    sp.ReceivedBytesThreshold = 4;
    MessageBox.Show("Set subscriber method");
    sp.DataReceived += Sp_DataReceived;
}

//Subscriber method when data is received
private void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    MessageBox.Show("Found data");
    GetDataFromPort();
    if (OnBoardStatusChange != null)
        OnBoardStatusChange(this, e);

}

修改 添加了用于创建COM对象的VBSCript。

Dim oArduino

'Create COM object
Set oArduino = WScript.CreateObject("ArduinoRFID")

'Show main form that pick up serial data
oArduino.ShowMe()

Loopit = True

'Start loop and look for new data
Do While Loopit

    'If boolean IsDataReady in COM object is true then new data has arrived   
    If oArduino.IsDataReady = True Then

        theBoard1 = oArduino.Prod1
        theBoard2 = oArduino.Prod2
        theBoard3 = oArduino.Prod3

        'Reset IsDataReady
        oArduino.IsDataReady = False

    end If
    'Limit the stress on COM by only asking twice a minute for new data
    WScript.Sleep(500)
Loop

0 个答案:

没有答案