Laden...

UWP SerialDevice in Class Library nutzen

Erstellt von NOFX vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.467 Views
N
NOFX Themenstarter:in
42 Beiträge seit 2015
vor 6 Jahren
UWP SerialDevice in Class Library nutzen

Hallo,

für eine Standalone-Anwendung entwickele ich gerade auf Basis von UWP eine App für Windows IoT auf einem Minnowboard, die über den UART und einem Pegelwandler RS485 zur Kommunikation nutzen soll.

Wenn ich in der App direkt Windows.Devices.Enumeration und Windows.Devices.SerialCommunication einbinde kann ich mit dem folgenden Code auf die seriellen Ports zugreifen, wenn ich diesen Codeabschnitt jedoch in einen Klassenbibliothek verschiebe, geht dies nicht mehr.

        public async void Connect()
        {
            string aqs = SerialDevice.GetDeviceSelector();
            DeviceInformationCollection dis = await DeviceInformation.FindAllAsync(aqs);
            var comPorts = new List<SerialDevice>();
            foreach (DeviceInformation di in dis)
            {
                comPorts.Add(await SerialDevice.FromIdAsync(di.Id));
            }
        }

Dieses Verhalten liegt wohl an den Capabilites, die ich für die App gesetzt habe, die jedoch nicht in die Klassenbibliothek weitergereicht werden:

  <Capabilities>
    <DeviceCapability Name="serialcommunication">
      <Device Id="any">
        <Function Type="name:serialPort" />
      </Device>
    </DeviceCapability>
  </Capabilities>

Hat hier vielleicht schon jemand mit dem selben Problem zu tun gehabt und ein passende Lösung?

16.826 Beiträge seit 2008
vor 6 Jahren

Generell:
async void ist ein Pitfall und kann einen Deadlock auslösen.

async void ist nur bei Events legitim, bei allen anderen Sitationen ist async Task zu verwenden.
Ebenso ist es Standard, dass asynchrone Methoden dies auch im Namen tragen, also ConnectAsync.

Zum Problem:
Capabilities gelten für die gesamte AppDomain und sollten auch bei Class Libaries im jeweiligen Kontext wie immer funktionieren.