Недопустимое исключение приведения на WiFiDirectDevice.FromIdAsync()

#c# #uwp #wifi-direct

#c# #uwp #wifi-direct

Вопрос:

Я пытаюсь создать рекламодателя WifiDirect для сопряжения моего компьютера с телефоном Android. Следуя этому руководству по Wi-Fi Direct, я дошел до того, что мой КОМПЬЮТЕР объявляет о подключении, и я вижу доступную опцию для подключения по телефону. Однако, когда я выбираю свой компьютер для подключения, программа выдает System.InvalidCastException: 'Specified Cast is not valid.' ошибку в WiFiDirectDevice.FromIdAsnc() строке.

Ниже приведена соответствующая OnConnectionRequested функция, которая добавляется в качестве прослушивателя событий перед началом публикации. Я скопировал метод построчно из руководства (15: 30), поэтому я не совсем уверен, где я здесь ошибаюсь. Буду признателен за любую помощь.

 private async void OnConnectionRequested(WiFiDirectConnectionListener
        sender, WiFiDirectConnectionRequestedEventArgs args)
{
    WiFiDirectConnectionRequest connectionRequest  = args.GetConnectionRequest();
    //Problem line is here:
    WifiDirectDevice wfdDevice = await WiFiDirectDevice.FromIdAsync(connectionRequest.DeviceInformation.Id);
    var EndpointPairs=wfdDevice.GetConnectionEndpointPairs();
    //TODO establish socket connection using above IP addresses
}

private void StartAdvert ()
{
    publisher = new WiFiDirectAdvertisementPublisher();

    //Sets the listen state to normal, so it can be discovered when app is in foreground
    publisher.Advertisement.ListenStateDiscoverability = WiFiDirectAdvertisementListenStateDiscoverability.Normal;

    listener = new WiFiDirectConnectionListener();
    listener.ConnectionRequested  = OnConnectionRequested;
    publisher.Start();
}
  

Комментарии:

1. Я не знаком с тем, что вы делаете, но не могли бы вы изменить wfdDevice на type object, чтобы подтвердить, что именно там находится недопустимое приведение? Если это так, вы можете проверить этот объект, чтобы увидеть, какой тип он возвращает. Это может пролить больше света на то, что происходит не так.

2. @cost, то же самое исключение выдается, даже если wfdDevice имеет тип object. Состояние docs FromIdAsync() фактически возвращает IAsycnOperation . Поэтому я изменил его на FromIdAsync(...).GetResults() . К сожалению, мне пришлось удалить ожидание в начале строки, поэтому во время выполнения оно выдавало нулевую ссылку.

3. Если вы вызовете FromAsyncID(), не присваивая возврат чему-либо, вы все равно получите недопустимое исключение приведения? Там больше нечего приводить, я предполагаю, что идентификатор в параметре действителен? Можете ли вы опубликовать трассировку стека из получаемого вами исключения?

4. Та же ошибка по-прежнему выдается, даже если ничего не установлено. Я печатал идентификатор, чтобы подтвердить, что он существует, и убедился, что он действительно определен как строка.

5. Вот подробные сведения об ошибке: System.InvalidCastException HResult=0x80004002 Message=Specified cast is not valid. Source=System.Private.CoreLib StackTrace: at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() при Wifi_Direct_Testing . Подключайте телефон. <OnConnectionRequested>d__4.MoveNext() в C:UsershuntersourcereposWifi-Direct Тестирование Wifi-Прямое тестированиеConnectToPhone.xaml.cs:строка 60 `