1

我是 Windows 10 IoT 的新手。

我将使用 DragonBoard 410c 将应用程序作为白板应用程序。

我将按钮连接到 GPIO。

并编码如下,但发生错误。

private void InitGPIO()
{
    var gpio = GpioController.GetDefault();

    if(gpio == null)
    {

        var dialog2 = new MessageDialog("Please Check GPIO");
        dialog2.ShowAsync();

        return;
    }
    BTN_UP = gpio.OpenPin(BTN_UP_NUMBER);

    BTN_UP.SetDriveMode(GpioPinDriveMode.Input);

    BTN_UP.DebounceTimeout = TimeSpan.FromMilliseconds(50);
    BTN_UP.ValueChanged += btn_up_pushed;

    var dialog = new MessageDialog("GPIO Ready");
    dialog.ShowAsync();
}

private void btn_up_pushed(GpioPin sender, GpioPinValueChangedEventArgs e)
{
    int but_width = 0;
    int but_height = 0;

    but_width = (int)cutButton.Width;
    but_height = (int)cutButton.Height;
}

当我按下按钮时,称为 btn_up_pushed()。但错误发生如下图。

在此处输入图像描述

请帮我!

4

1 回答 1

1

由于您在非 UI 线程中访问 UI 元素(cutButton 是 Button 对吗?),您会收到以下异常。

在此处输入图像描述

您需要将线程从当前执行线程编组到 UI 线程。

Windows.UI.Core.CoreDispatcher 可以用于此。这是一个例子:

using Windows.ApplicationModel.Core;

    private async void btn_up_pushed(GpioPin sender, GpioPinValueChangedEventArgs e)
    {
        int but_width = 0;
        int but_height = 0;

        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
            but_width = (int)cutButton.Width;
            but_height = (int)cutButton.Height;
        });
    }

参考:“ CoreDispatcher.RunAsync

于 2018-08-21T08:33:46.077 回答