Ich erstelle eine UWP APP, um die Daten von Waspmote Board zu erhalten, ich WindForm verwendet wurde, um es zu entwickeln, kann es funktionieren, aber weil UWP using System.IO.Port
nicht unterstützt, so verwende ich using Windows.Devices.SerialCommunication;
Ich schaue durch die Papiere , aber ich habe immer noch keine Ahnung, wie ich anfangen kann, wie kann ich den Windform-Code in UWP-Code umwandeln?Uwp serielle Geräte
der Windform Code wie unten
public Form1()
{
InitializeComponent();
getAvailablePorts();
}
void getAvailablePorts()
{
// Get a list of existing ports
String[] ports = SerialPort.GetPortNames();
String[] baudrates = new String[] { "9600", "115200" };
// Insert the lists into the combo boxes
comboBox1.Items.AddRange(ports);
comboBox2.Items.AddRange(baudrates);
// Select the default setting if at least a com port is found.
if (ports.Count() != 0)
{
comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 1;
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
if (comboBox1.Text == "" || comboBox2.Text == "")
{
textBox1.Text = "Please select port settings";
}
else
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
serialPort1.DataReceived += new
SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Open();
progressBar1.Value = 100;
button1.Enabled = false;
button2.Enabled = true;
}
}
catch (UnauthorizedAccessException)
{
textBox1.Text = "UnauthorizedAccess";
}
}
private void serialPort1_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string value = sp.ReadExisting();
processValue(value);
}
//Delegate to update received data in the textbox
private delegate void processValueDelegate(string value);
private void processValue(string value)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new processValueDelegate(processValue),
new object[] { value });
}
else
{
// ... update GUI in here ...
textBox1.AppendText(value);
DataExtraction(value);
}
}
string UnreadBuffer = "";
private void DataExtraction(string RxString)
{
UnreadBuffer += RxString;
// Search for Data Header "<=>"
int start = UnreadBuffer.IndexOf("<=>");
int delimiter = UnreadBuffer.IndexOf("#");
if (start >= 0)
{
string row = UnreadBuffer.Substring(start);
if (delimiter >= 0)
{
string[] ExtractedDataFields = row.Split('#');
if (ExtractedDataFields.Length >= 7)
{
textBox2.Text = string.Format("{0:HH:mm:ss tt}", DateTime.Now);
textBox3.Text = ExtractedDataFields[1];
textBox4.Text = ExtractedDataFields[2];
textBox5.Text = ExtractedDataFields[3];
textBox6.Text = ExtractedDataFields[5];
UnreadBuffer = "";
}
}
}
}
* Und ich habe anohther Frage: Da UWP, nicht Serialport in Toolbox haben, was in UWP der Ersatz ist?
Mögliches Duplikat von [UWP-Link zu seriellem Port] (https://stackoverflow.com/questions/47791149/uwp-link-to-serial-port) –
I Think @Vincent hat diese Frage zu deinem vorherigen Thread beantwortet. In UWP müssen Sie [Windows.Devices.SerialCommunication-Namespace] (https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.SerialCommunication) relevante APIs verwenden, um dies zu erreichen. Er hat auch das offizielle Codebeispiel [Custom serial device sample] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CustomSerialDeviceAccess) erwähnt. Die Szenarien dieses Beispiels haben Ihnen tatsächlich mitgeteilt, wie Sie mit dem seriellen Gerät kommunizieren (einschließlich Lese- und Schreibdaten). –
Ja, Sie finden alles in der Probe. Ich kann hier genau den gleichen Code schreiben, aber das wäre nutzlos. Sie sollten das Beispiel herunterladen und versuchen, Szenario 4 (lesen/schreiben) zu starten und beginnen, es für Ihren Bedarf zu optimieren. In UWP haben Sie kein 'SerialPort'-Steuerelement, das Sie löschen können und das alles für Sie übernimmt. Sie müssen zuerst die Geräte auflisten, das gewünschte konfigurieren und öffnen und dann die Ein-/Ausgabestreams abrufen, um die Daten zu lesen und zu schreiben. – Vincent