私はC#で新しく、一部のSwift Bluetooth LEコードをC#UWPに変換します。代わりにコールバックを使用するためにawaitを使用してコードを変換することはできます
async/awaitを使用するコードがあります。しかし、それをSwiftに似ているようにするには、Asyncが完了したAPIがコールバックされるのが理想です。例えば
、SWIFTコードは:
private func connect_to(per : CBPeripheral) {
centralManager?.connect(per, options: nil)
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.delegate = self
peripheral.discoverServices([transferServiceUUID])
}
第funcがコールバックです。現在、C#で私はこのようなものを持っている:
private async void ConnectByID_OrAddr(UInt64 btAddr)
{
btLEDev = await BluetoothLEDevice.FromBluetoothAddressAsync(btAddr);
if (btLEDev == null) {
// TODO: failure notifications...
return;
}
GattDeviceServicesResult result =
await btLEDev.GetGattServicesAsync(BluetoothCacheMode.Uncached);
// etc.
}
私はC#で委任を使用しての参照を見ましたが、API呼び出しでこれを行う方法を私に明確ではありませんでした。
非同期にチャンスを待ってください。実際にコードを読みやすくしてくれますし、それを何かから作成することもできます。それはコードのコールバックバージョンと似ています。 –
この質問は不明です。カスタムデリゲート定義を作成したり、アクション/関数を使用したり、コールバックインターフェイスを作成したり、クラスを継承したりすることができます。しかし、非同期的には読みやすくなります。 –
私の問題は、カスタムデリゲート定義を行う方法を理解できなかったことです。しかし、この時点で、私は非同期/待機で動作するように確信していると思います。 – bobwki