示例#1
0
        // TODO: Make this available to other generated interfaces too, not just IDevice1.
        // `dynamic obj` works, but it requires a Microsoft.* NuGet package and isn't type safe.
        public static async Task WaitForPropertyValueAsync <T>(this IDevice1 obj, string propertyName, T value,
                                                               TimeSpan timeout)
        {
            var(watchTask, watcher) = WaitForPropertyValueInternal <T>(obj, propertyName, value);
            var currentValue = await obj.GetAsync <T>(propertyName);

            // Console.WriteLine($"{propertyName}: {currentValue}");

            // https://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c
            if (EqualityComparer <T> .Default.Equals(currentValue, value))
            {
                watcher.Dispose();
                return;
            }

            await Task.WhenAny(new Task[] { watchTask, Task.Delay(timeout) });

            if (!watchTask.IsCompleted)
            {
                throw new TimeoutException($"Timed out waiting for '{propertyName}' to change to '{value}'.");
            }

            // propogate any exceptions.
            await watchTask;
        }
示例#2
0
 public static Task <short> GetTxPowerAsync(this IDevice1 o) => o.GetAsync <short>(nameof(Device1Properties.TxPower));
示例#3
0
 public static Task <IDictionary <string, object> > GetServiceDataAsync(this IDevice1 o) =>
 o.GetAsync <IDictionary <string, object> >(nameof(Device1Properties.ServiceData));
示例#4
0
 public static Task <IDictionary <ushort, object> > GetManufacturerDataAsync(this IDevice1 o) =>
 o.GetAsync <IDictionary <ushort, object> >(nameof(Device1Properties.ManufacturerData));
示例#5
0
 public static Task <IAdapter1> GetAdapterAsync(this IDevice1 o) => o.GetAsync <IAdapter1>(nameof(Device1Properties.Adapter));
示例#6
0
 public static Task <string> GetModaliasAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Modalias));
示例#7
0
 public static Task <string[]> GetUUIDsAsync(this IDevice1 o) => o.GetAsync <string[]>(nameof(Device1Properties.UUIDs));
示例#8
0
 public static Task <string> GetNameAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Name));
示例#9
0
 public static Task <short> GetRSSIAsync(this IDevice1 o) => o.GetAsync <short>(nameof(Device1Properties.RSSI));
示例#10
0
 public static Task <bool> GetLegacyPairingAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.LegacyPairing));
示例#11
0
 public static Task <bool> GetBlockedAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.Blocked));
示例#12
0
 public static Task <string> GetIconAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Icon));
示例#13
0
 public static Task <ushort> GetAppearanceAsync(this IDevice1 o) => o.GetAsync <ushort>(nameof(Device1Properties.Appearance));
示例#14
0
 public static Task <uint> GetClassAsync(this IDevice1 o) => o.GetAsync <uint>("Class");
示例#15
0
 public static Task <bool> GetServicesResolvedAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.ServicesResolved));
示例#16
0
 public static Task <bool> GetConnectedAsync(this IDevice1 o) => o.GetAsync <bool>(nameof(Device1Properties.Connected));
示例#17
0
 public static Task <string> GetAddressAsync(this IDevice1 o) => o.GetAsync <string>(nameof(Device1Properties.Address));