私は、Windows-10-tプラットフォームのアプリケーションをraspberry-pi3に開発しています。アプリケーションはいくつかのページを持ち、バックグラウンドで非同期的にGPIOポートを待ち受けます。 GPIOからデータを収集し、WCFSサービスから送信されたデータによって少しUIが更新された後、WCFサービスに送信されます。私はまた、タスク、Dispatcher.Invokeなどを使用してみましたが、何も正しく機能しませんでした。 GPIOからのデータを収集することはできますが、UIは更新できません。私は間違って何をしていますか?ここで別のGPIOListenerクラスからUIを更新します。
は(私も他のページに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());
}
}
そしてここでは、更新されるUIが含まれているページがあります
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))" DataPin_Valuechangedで呼び出されたAddData関数で例外がスローされます。