[C#] - Kann die Baudrate nicht ändern

OP #3658260
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
Angehängte Dateien:
Gast #3658279
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
      }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren