AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) C# .Net-eigene ComPort-Klasse extrem langsam?!
Thema durchsuchen
Ansicht
Themen-Optionen

.Net-eigene ComPort-Klasse extrem langsam?!

Ein Thema von Meflin · begonnen am 17. Jan 2009 · letzter Beitrag vom 18. Jan 2009
 
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

.Net-eigene ComPort-Klasse extrem langsam?!

  Alt 17. Jan 2009, 21:01
Moin moin!

Ich spiele grade ein bisschen mit Visual C# rum. Ich hab einen GPS-Empfänger über PCMCIA angeschlossen, der Daten über einen Comport sendet. Zu diesem Empfänger gabs auch ein Testprogramm. Wenn ich mit diesem Testprogramm teste, bekomme ich mindestens einen Datensatz pro Sekunde rein.

Nuja. Hab mir also ein C#-Programm geschrieben, was einfach nur mittels System.IO.Ports.SerialPort und den entsprechenden Geräteeinstellungen eben diese Datensätze empfängt - aber WESENTLICH langsamer. Manchmal kommt minutenlang garnichts, und das kann eigentlich nicht stimmen.

Also hab ich auch mal andere allgemeine Comport-Programme getestet, auch die empfangen schneller.

Ich bin da gerade etwas ratlos

Irgendjemand ne Idee, woher diese Diskrepanz kommen könnte?


Hier der Code, falls sich jemand durchquälen möchte
Code:
namespace GPStat
{
    public partial class Form1 : Form
    {
        SerialPort port = new SerialPort();

        public Form1()
        {
            InitializeComponent();
        }

        private delegate void MethInvDel(string text);

        private void SetText(string text)
        {
            if (tbxRawData.InvokeRequired)
            {
                tbxRawData.BeginInvoke(new MethInvDel(SetText), text);
            }
            else
            {
                tbxRawData.Text += "\r\n" + text;
                tbxRawData.Select(tbxRawData.Text.Length + 1, 2);
                tbxRawData.ScrollToCaret();
            }
        }


        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string NewPackage = port.ReadLine();
            SetText(NewPackage);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] ports = SerialPort.GetPortNames();
            for (int i = 0; i < ports.Length; i++)
            {
                cbxPortName.Items.Add(ports[i]);
            }
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {

            switch (btnConnect.Text)
            {
                case "Connect":
                    tbxRawData.Clear();
                    port.PortName = cbxPortName.Text;
                    port.BaudRate = Convert.ToInt32(cbxBaudRate.Text);
                    port.DataBits = Convert.ToInt32(cbxDataBits.Text);

                    // Set Parity
                    switch (cbxParity.Text)
                    {
                        case "none":
                            port.Parity = Parity.None;
                            break;
                        case "odd":
                            port.Parity = Parity.Odd;
                            break;
                        case "even":
                            port.Parity = Parity.Even;
                            break;
                        case "mark":
                            port.Parity = Parity.Mark;
                            break;
                        case "space":
                            port.Parity = Parity.Space;
                            break;
                    }

                    // Set Stop Bits
                    switch (cbxStopBits.Text)
                    {
                        case "none":
                            port.StopBits = StopBits.None;
                            break;
                        case "1":
                            port.StopBits = StopBits.One;
                            break;
                        case "1.5":
                            port.StopBits = StopBits.OnePointFive;
                            break;
                        case "2":
                            port.StopBits = StopBits.Two;
                            break;
                    }

                    btnConnect.Text = "Disconnect";
                    port.Open();
                    break;

                case "Disconnect":
                    btnConnect.Text = "Connect";
                    port.Close();
                    break;
            }

        }


    }
}
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz