события не работают при подключении 10 tcp клиентов - PullRequest
0 голосов
/ 29 июня 2018

Я использую настраиваемое клиентское соединение для 10 TCP-клиентов.

bool _flagScanner1Connect = true;
private xyzTranmissionProtocol  xyz1TranmissionProtocol = null;
private static readonly object LockWhileConnectingForScanner1 = new object();
internal ICustomClient Scanner1Conn;
System.Threading.Timer _tmrCheck1ClientConn;

public void Start1ScannerConn()
{
    try
    {
        _tmrCheck1ClientConn = new System.Threading.Timer(Check1ScannerConn, null, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(5));
    }
    catch (Exception )
    {

    }
}

private void Check1ScannerConn(object state)
{
    if (!_flagScanner1Connect)
        return;
    lock (LockWhileConnectingForScanner1)
    {
        if (Scanner1Conn == null || Scanner1Conn.CommunicationState == ClientCommunicationStates.Disconnected)
        {
            try
            {
                _tmrCheck1ClientConn.Change(Timeout.Infinite, Timeout.Infinite);

             Scanner1Conn = CustomClientFactory.CreateClient(new CustomClientTcpEndPoint(“Scanner IpAdress”, “Scanner Port Number”));
             Scanner1Conn.Connected += Scanner1Conn_Connected; ;
             Scanner1Conn.Disconnected += Scanner1Conn_Disconnected;
             Scanner1Conn.MessageReceived += Scanner1Conn_MessageReceived;
             xyz1TranmissionProtocol = new xyzTranmissionProtocol();
             Scanner1Conn.TransmissionProtocol = xyz1TranmissionProtocol;
             .Connect();
             //SEND A PING MESSAGE
             _tmrCheck1ClientConn.Change(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));



                    }
                    catch (Exception )
                    {
                        if (_flagScanner1Connect)

                        try
                        {
                            Scanner1Conn?.Disconnect();
                        }
                        catch { }
                        try
                        {
                            Scanner1Conn?.Dispose();
                        }
                        catch { }
                        try
                        {
                            Scanner1Conn = null;
                        }
                        catch { }
                    }
                    finally
                    {
                        _tmrCheckClientConn.Change(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));
                    }
                }
            }
        }

Я написал 10 различных функций для 10 сканеров штрих-кода. если я использую 3 или менее 3, мое приложение будет работать. но если я использую более 3 сканеров, то сообщения, восстановленные сообщениями, не запускаются. и приложение станет очень медленным. Может кто-нибудь помочь мне решить эту проблему.

...