Приложение Azure UWP получает сообщение на локальном компьютере, но выдает «Метод, вызванный в неожиданное время» при развертывании на RPi 3B под управлением Windows IoT Core. - PullRequest
0 голосов
/ 01 января 2019

Я создал приложение UWP для получения сообщения, отправленного другим приложением.Сообщение успешно достигает концентратора IoT, как я проверил на вкладке IoT Devices.Сообщение также успешно принимается при запуске на локальном компьютере, комментируя код контактов GPIO.Однако при запуске на реальном Raspberry Pi код выдает исключение «Метод был вызван в неожиданное время», как видно из переменной e отладчика.

Вот исключение, которое выдается

Я пытался изменить целевую сборку, обновить и понизить библиотеку клиентов Azure, создать весь проект с нуля.

namespace Test
{
public sealed partial class MainPage : Page
{
    const int LED_PIN = 5;
    GpioPin pin;
    GpioPinValue pinValue;
    string connection = string.Format("HostName=FYPHub.azure-devices.net;DeviceId=Device;SharedAccessKey=7Cw6whjx4EU7s5nqR7PmljY/vOYLY9QMqG2fG+mM0Ig=");
    DeviceClient deviceClient;

    public MainPage()
    {
        this.InitializeComponent();
        InitGPIO();
        deviceClient = DeviceClient.CreateFromConnectionString(connection, TransportType.Amqp);
        ReceiveMessage();
    }

    private async void ReceiveMessage()
    {
        while (true)
        {
            var message = await deviceClient.ReceiveAsync();

            if (message == null)
                continue;

            try
            {
                var bytes = message.GetBytes();
                var command = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
                TBox.Text = "Command: " + command;
                if (command == "On")
                {
                    pinValue = GpioPinValue.High;
                    pin.Write(pinValue);
                }
                else
                {
                    pinValue = GpioPinValue.Low;
                    pin.Write(pinValue);
                }
                await deviceClient.CompleteAsync(message);
            }
            catch (Exception) { }
        }
    }

    private void InitGPIO()
    {
        GpioController gpio = GpioController.GetDefault();
        pin = gpio.OpenPin(LED_PIN);
        pinValue = GpioPinValue.Low;
        pin.Write(pinValue);
        pin.SetDriveMode(GpioPinDriveMode.Output);
    }
}
}
...