Forum: PC-Programmierung [C#] - Kann die Baudrate nicht ändern


von Pascal H. (pase-h)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich habe ein kleines problem mit meinen Programm:

Ich habe einen seriellen Port COM3, COM4 und COM5 auf meinen Bluetooth 
adapter erstellt. Über den Gerätemanager kann ich jetzt auch die 
verschiedenen baudraten einstellen, jedoch erkennt mein Programm die 
Baudrate nicht, und kann die auch nicht ändern. - Es wird jedes mal eine 
Baudrate von 9600 ausgelesen.

Hier mal mein bisheriger Sourcecode
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Linq;
7
using System.Text;
8
using System.Threading.Tasks;
9
using System.Windows.Forms;
10
using System.IO;
11
using System.IO.Ports;
12
13
namespace SerComm
14
{
15
    public partial class Form1 : Form
16
    {
17
        public string st;
18
        public Form1()
19
        {
20
            InitializeComponent();
21
        }
22
23
        private void Form1_Load(object sender, EventArgs e)
24
        {
25
            GetNames();
26
        }
27
28
        private void RefreshButton_Click(object sender, EventArgs e)
29
        {
30
            GetNames();
31
        }
32
33
        private void ComportTreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
34
        {
35
            string s;
36
            s = ComportTreeView1.SelectedNode.ToString();
37
            if (s.Contains("COM") == true)
38
            {
39
                st = s;
40
            }
41
        }
42
43
        private void SetBaudButton2_Click(object sender, EventArgs e)
44
        {
45
            SerialPort sp = new SerialPort();
46
            sp.PortName = st;
47
            sp.BaudRate = Convert.ToInt32(SelectBaudrateComboBox1.SelectedItem.ToString());
48
            GetNames();
49
        }
50
51
        private void GetNames()
52
        {
53
            ComportTreeView1.ImageList = imageList1;
54
            ComportTreeView1.Nodes.Clear();
55
            foreach (string s in SerialPort.GetPortNames())
56
            {
57
                SerialPort sp = new SerialPort();
58
                sp.PortName = s;
59
                TreeNode ParentNode = new TreeNode();
60
                ParentNode.Text = s;
61
                ParentNode.ImageIndex = 0;
62
                ParentNode.SelectedImageIndex = 0;
63
                ComportTreeView1.Nodes.Add(ParentNode);
64
65
            }
66
            ComportTreeView1.ImageIndex = 1;
67
            ComportTreeView1.SelectedImageIndex = 1;
68
            foreach (TreeNode tn in ComportTreeView1.Nodes)
69
            {
70
                SerialPort sp = new SerialPort();
71
                sp.PortName = tn.Nodes.ToString();
72
73
                tn.Nodes.Add("Baud:            " + sp.BaudRate.ToString());
74
                tn.Nodes.Add("Databits:       " + sp.DataBits.ToString());
75
                tn.Nodes.Add("Parity:           " + sp.Parity.ToString());
76
                tn.Nodes.Add("Stopbits:       " + sp.StopBits.ToString());
77
                tn.Nodes.Add("Handshake: " + sp.Handshake.ToString());
78
            }
79
80
81
            ComportTreeView1.ExpandAll();
82
83
        }
84
    }
85
}

Über den Gerätemanager kann ich wie oben bereits geschrieben jede 
mögliche Baudrate einstellen, jedoch werden von meinen Programm immer 
nur 9600 Baud ausgelesen - Egal ob die Baudrate über mein Programm, oder 
im Gerätemanager eingestellt wurde.

Jetzt ist meine Frage: gibt es irgend eine möglichkeit meine Baudrate zu 
ändern?

Ich hoffe, ihr könnt mir helfen.
Mit freundlichen grüßen
Pascal

von nicht"Gast" (Gast)


Lesenswert?

Hallo,

du legst jedes mal ein lokales Objekt names sp an. Nach verlassen der 
Methode wird das durch den GC aufgeräumt.

versuch mal in der Art
1
   class foo
2
   {
3
      private SerialPort meinPort = new SerialPort();
4
5
      private void tuWasHier()
6
      {
7
          irgendwas = meinPort.baudrate.ToString(); 
8
      }
9
10
      private void tuWasDa()
11
      {
12
          meinPort.Baudrate = int.Convert(vonIrgendWasAnderem);
13
      }

von Pascal H. (pase-h)


Lesenswert?

nicht"Gast" schrieb:
> du legst jedes mal ein lokales Objekt names sp an. Nach verlassen der
> Methode wird das durch den GC aufgeräumt.

VIELEN DANK :D - durch deinen Hinweis konnte ich das Problem lösen! - 
Ich habe den seriellen Port jetzt global definiert, und auf einmal geht 
alles.

Danke nochmal!

Mit freundlichen grüßen
Pascal

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.