我是C#和Azure IoT的新手。也许我遇到的问题很容易解决。我想通过从云调用方法来更新UI元素。但我收到以下错误:
该应用程序调用了一个为a编组的接口 不同的线程。 (HRESULT的例外情况:0x8001010E (RPC_E_WRONG_THREAD))
我知道UI与另一个线程中运行的事实有关。但我找不到任何解决方案。
这里是代码
public sealed partial class MainPage : Page
{
DeviceClient deviceClient;
public MainPage()
{
this.InitializeComponent();
deviceClient = DeviceClient.CreateFromConnectionString(GlobalConstant.DEVICE_CONNECTION_STRING, TransportType.Mqtt);
deviceClient.SetMethodHandlerAsync("UpdateTextfield", UpdateTextfield, null);
}
private void updateTextField ()
{
IncomingMessage.Text = "Update";
}
private Task<MethodResponse> UpdateTextfield(MethodRequest methodRequest, object userContext)
{
updateTextField();
string result = "{\"result\":\"Executed direct method: " + methodRequest.Name + "\"}";
return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
}
}
答案 0 :(得分:0)
您正在调用的过程:
IncomingMessage.Text = "Update";
发生在非UI线程的线程上。您需要将线程从当前正在执行的线程封送到UI线程。
Windows.UI.Core.CoreDispatcher可以用于此。这是一个例子:
using Windows.ApplicationModel.Core;
private async void updateTextField ()
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, ()=>{
IncomingMessage.Text = "Update";
});
}