Guten Morgen,
ich habe mal wieder ein Problemchen Ich habe das Beispiel von Microsoft für die Verwendung der UART-Schnittstelle des Raspberry Pi (3) unter Windows 10 IoT befolgt und das Problem, dass ich nur einmal mit einem SerialPort Verbinden kann:
letztendlich steigt er in Zeile 89 aus und schmeißt eine NullreferenceException (Object reference not set to an instance of an object). Meine Frage ist warum das ein erstes Mal geht und kein zweites Mal?
ich habe mal wieder ein Problemchen Ich habe das Beispiel von Microsoft für die Verwendung der UART-Schnittstelle des Raspberry Pi (3) unter Windows 10 IoT befolgt und das Problem, dass ich nur einmal mit einem SerialPort Verbinden kann:
Code:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Devices.SerialCommunication;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Storage.Streams;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace SerialMonitor_UWP__2
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
private SerialDevice serialPort = null;
DataWriter dataWriteObject = null;
DataReader dataReaderObject = null;
private ObservableCollection<DeviceInformation> listOfDevices;
private CancellationTokenSource ReadCancellationTokenSource;
public MainPage()
{
this.InitializeComponent();
listOfDevices = new ObservableCollection<DeviceInformation>();
ListAvailablePorts();
}
private async void ListAvailablePorts()
{
try
{
string aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
for (int i = 0; i < dis.Count; i++)
{
listOfDevices.Add(dis[i]);
}
DeviceListSource.Source = listOfDevices;
listBox.SelectedIndex = -1;
}
catch (Exception ex)
{
textBox.Text = ex.Message;
textBox.Text += "ListAvailablePorts()";
listBox.SelectedIndex = -1;
}
serialPort = null;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
ListAvailablePorts();
}
private async void button2_Click(object sender, RoutedEventArgs e)
{
var selection = listBox.SelectedItems;
if(selection.Count <= 0)
{
textBox.Text = "Wählen Sie einen COM-Port und verbinden Sie";
return;
}
DeviceInformation entry = (DeviceInformation)selection[0];
try
{
serialPort = await SerialDevice.FromIdAsync(entry.Id);
serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.BaudRate = 9600;
serialPort.Parity = SerialParity.None;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
serialPort.Handshake = SerialHandshake.None;
textBox.Text = "COM-Port erfolgreich eingerichtet: ";
textBox.Text += serialPort.PortName + "-";
textBox.Text += serialPort.BaudRate + "-";
textBox.Text += serialPort.DataBits + "-";
textBox.Text += serialPort.Parity.ToString() + "-";
textBox.Text += serialPort.StopBits;
}
catch(Exception ex)
{
textBox.Text = ex.Message;
}
}
}
}
letztendlich steigt er in Zeile 89 aus und schmeißt eine NullreferenceException (Object reference not set to an instance of an object). Meine Frage ist warum das ein erstes Mal geht und kein zweites Mal?