C# 在串行端口数据接收事件期间发送数据

C# 在串行端口数据接收事件期间发送数据,c#,serial-port,C#,Serial Port,我使用COM4串行端口发送和接收数据。我收到了一个请求-我验证该请求是否为mydatastring=myrequeststring-这可以正常工作。在此事件处理程序期间,我试图通过com端口回复数据,但访问当然被拒绝。收到请求后,我如何完成数据的发送 void scScale_OnReceiving(object sender, DataStreamEventArgs e) { if( e.Response == myrequeststring )

我使用COM4串行端口发送和接收数据。我收到了一个请求-我验证该请求是否为mydatastring=myrequeststring-这可以正常工作。在此事件处理程序期间,我试图通过com端口回复数据,但访问当然被拒绝。收到请求后,我如何完成数据的发送

    void scScale_OnReceiving(object sender, DataStreamEventArgs e)
    {
        if( e.Response == myrequeststring )
        {
            scScale.Transmit(this.data);
        }             
    }
编辑

scScale的相关部分—它是一个SerialPort客户端类—基本上封装了SerialPort的详细信息

相关代码:

public bool OpenConn()
{
    try
    {
        if (_serialPort == null)
            _serialPort = new SerialPort(_port, _baudRate, Parity.None);

        if (!_serialPort.IsOpen)
        {
            _serialPort.ReadTimeout = -1;
            _serialPort.WriteTimeout = -1;

            _serialPort.Open();

            if (_serialPort.IsOpen)
            {
                serThread.Start(); /*Start The Communication Thread*/
                IsOpen = true;
            }
            else
            {
                IsOpen = false;
            }

        }
    }
    catch (Exception ex)
    {
        return false;
    }

    return true;
}


public void Transmit(string packet)
{
    _serialPort.Write(packet); // 0, packet.Length);
}

public void Transmit(byte[] packet)
{
    _serialPort.Write(packet, 0, packet.Length);
}
public int Receive(byte[] bytes, int offset, int count)
{
    int readBytes = 0;

    if (count > 0)
    {
        readBytes = _serialPort.Read(bytes, offset, count);
    }

    return readBytes;
}
    private void OnSerialReceiving(byte[] res)
    {
        if (OnReceiving != null)
        {
            OnReceiving(this, new DataStreamEventArgs(res));
        }
    }
SCSCALE是链接处的代码。。

我不知道这为什么有效,但它确实有效;当串行端口被实例化时,我创建了事件处理程序,它确实触发了事件,但在处理该事件期间,我无法通过端口发送回复。 但是,如果我在端口打开后订阅该事件,该事件将触发,我将有权访问该端口以发送回复

虽然我没有发布我的完整代码,但在传输之前我会验证端口是否打开,如果没有,我会打开端口。 现在,我打开端口,然后订阅OnReceive事件,而不是立即订阅receive事件

我之所以在端口打开后将代码更改为订阅,是因为我在SO和其他一些网站上阅读了关于端口打开前订阅导致的奇怪行为的信息


因此,简言之,在端口打开后订阅接收事件。

发送方是串行端口吗?如果是这样的话,为什么不铸造它并使用它呢?什么是scScale?标准windows串行端口没有传输方法。@dbasnett-我添加了一些相关代码-基本上是串行端口的封装。@Peter4499-远程程序通过com端口发送请求字符串。我读取连接的com端口。在我的data received事件(我读取数据)中,确定是否发出了请求。如果是这样,我从同一个com端口回复,我永远不会失去连接,因为我需要一直监听。我是如何得到任何东西的?我有一个访问被拒绝异常-很可能是因为我在串行端口的接收事件中-它没有完成-因此我假设它是阻塞的。@dbasnett我想我已经发现了问题-虽然很奇怪,我在com端口打开之前订阅了该事件-该事件被触发,它确实收到了我在事件但显然发送给我的访问被拒绝了-很奇怪。