Witam

mam dziwny problem z tym komponentem. Piszę program do komunikacji z moim układem elektronicznym, który bazuje na kontrolerze ATxmega.
Na potrzeby testów komunikacji zainstalowałem sobie wirtualne com porty, które są "sparowane ze sobą" ( przykładowo com 3 i 4)gdy wysyłam cos poprzez com 3 to trafia to do com 4 i odwrotnie. Napisałem 2 aplikacje, jedna ma emulować mój układ ( na czas napisania kompletnie działającego programu) a drugi program ma by docelową aplikacją.

Główna aplikacja na początku, sprawdza ile mam w komputerze portów COM i wpisuje na listę combobox wszystkie nie używane com porty.
porty sprawdzam w ten sposób:

private void Form1_Load(object sender, EventArgs e)
        {
            int a = 0;

            foreach (string portName in System.IO.Ports.SerialPort.GetPortNames())
            {
                Interface.PortName = portName;
                try
                {
                    Interface.Open();
                    if (Interface.IsOpen)
                    {
                        PortNr.Items.Add(portName);
                        Interface.Close();
                        a = a + 1;
                    }
                }
                catch { }

            }
            if (a > 0)
            {
                Port.Enabled = true;
                PortNr.SelectedIndex = 0;
            }
            else
            {
                Port.Enabled = false;
                PortNr.Enabled = false;
                ViewLog.SelectedText = "Brak portów komunikacyjnych do połączenia się z urządzeniem.\nSprawdź zasilanie urządzenia i podłącz urządzenie do komputera za pośrednictwem portu USB.\n";
            }
            Timer.Enabled = false;
      }

Następnie otwieram com port pobrany z listy combobox i wysylam stringa - robię to tak:

        Inteface.PortName = PortNr.Text;
        Interface.Open();
        Interface.WriteLine("Connect-Ctrl");
        ViewLog.SelectedText = "Open Port: " + Interface.PortName + "\n";        
 

Jaki mam problem - Otóż nie mogę instrukcją "Interface.WriteLine" wysłać więcej niż 12 bajtów :( gdy dam dłuższy ciąg znaków to program wisi i nie ma to znaczenia czy jeden string będzie miał długość więcej niż 12 bajtów czy zrobię 2 osobne linie "Interface.WriteLine" , które będą wysyłały 2 ciągi string przykładowo po 10 znaków.

Krótko mówiąc po wysłaniu 12 bajtów więcej nie mogę nic wysłać, chyba, że zamknę i otworze ponownie port :(

natomiast drugim programie , który oczekuje na swoim com porcie string ("Connect-Ctrl"); w obsłudze zdarzenia "Interface_DataReceived" odbieram ten ciąg i w odpowiedzi wykonuję linię:

private void Interface_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            ViewLog.SelectedText = Interface.ReadLine();
            Interface.WriteLine ("Sound Interface Device  V2.0 - Firmware 1.1B - Autor Janusz .....");
        }
 

Jak widać mogę wysłać dowolnie długiego stringa i program mi się nie zawiesza, więc trudno mi powiedzieć dlaczego pierwszy program się wiesza :(

dodam, ze pierwszy program wysyła i odbiera dane z com portu w innym wątku który jest generowany przez komponent Timer, ale czy to może być problem ?