Я разрабатываю приложение с платформой Windows-10-t на малине-pi3. Приложение имеет несколько страниц и прослушивает порты GPIO asyncrhonously в фоновом режиме. Он собирает данные из GPIO и отправляет в WCF-сервис, после бит пользовательский интерфейс должен обновляться данными, поступающими из WCFсервиса. Я также пытался использовать Tasks, Dispatcher.Invoke и т. Д., Но ничего не работало должным образом. Я могу собирать данные, поступающие из GPIO, но не могу обновить интерфейс. Что я делаю не так?Обновление пользовательского интерфейса от другого класса GPIOListener
Вот класс фона GPIO слушателя со статическими переменными (я слушаю GPIO на других страницах тоже.):
public sealed class GPIO{
private static MainPage mainpage;
public static event EventHandler ProgressUpdate;
public static void InitGPIO(MainPage sender)
{
mainpage = sender;
DataPin.DebounceTimeout = TimeSpan.FromMilliseconds(50);
DataPin.ValueChanged += DataPin_ValueChanged;
}
public static void DataPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
if (e.Edge == GpioPinEdge.FallingEdge)
{
Task.Run(() => AddData(0));
}
}
public static async void AddData(int prm_Data)
{
// WCF-Service Operation
await Service.wsClient.GPIOValueAddition(prm_Data);
GPIO.ProgressUpdateOperation();
}
private static void ProgressUpdateOperation()
{
mainpage.GPIO_ProgressUpdate(typeof(GPIO), new EventArgs());
}
}
А вот страница, которая содержит пользовательский интерфейс будет обновлена:
public sealed partial class MainPage : Page
{
public MainPage()
{
GPIO.InitGPIO(this);
GPIO.ProgressUpdate += GPIO_ProgressUpdate;
}
public void GPIO_ProgressUpdate(object sender, EventArgs e)
{
// WCF-Service Operation
service_data = (int)Service.wsClient.GetDataFromServicetoUpdateUI(parameter).Result;
// UI-update
txtUpdate.Text = service_data.ToString();
}
}
EDIT: Я забыл добавить исключение. «Приложение называется интерфейсом, который был настроен для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))« Исключением является функция AddData, вызываемая в DataPin_Valuechanged.