【发布时间】:2018-06-06 09:32:00
【问题描述】:
我对 C# 和 Azure IoT 很陌生。也许我遇到的问题很容易解决。我想通过调用云中的方法来更新 UI 元素。但我收到以下错误:
应用程序调用了一个接口,该接口被编组为 不同的线程。 (来自 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));
}
}
【问题讨论】:
-
没有操作系统允许您从另一个线程修改 UI。在使用 MVVM 或只是数据绑定的 XAML/WPF/UWP 应用程序中,您无论如何都不需要。您不要直接修改控件。控件绑定到属性并在属性被修改并引发 PropertyChanged 事件时更新
-
无论如何,您都可以使用
IProgress<T>接口从后台线程报告进度或任何其他消息,如[在异步 API 中启用进度和取消](在异步 API 中启用进度和取消)所示 -
@quallenbezwinger 回复是否解决了您的问题或仍有问题?
标签: c# azure asynchronous iot azure-iot-hub