c# - 过于频繁地设置 Label.Text 会导致应用程序崩溃 - Xamarin.Forms
问题描述
我正在为移动/可穿戴设备开发 MQTTnet 应用程序。我已经在标准 C# 控制台应用程序和 .Net Core 应用程序中测试了我的代码,两者都按预期工作。我遇到的问题是当我将代码移植到 Xamarin Forms 以在 Galaxy Watch 上运行时。该应用程序将运行几秒钟,但随后会崩溃。我相信这可能是因为过于频繁地分配标签文本?
我有一个 MQTT 发布设备,它以 10 毫秒的间隔输出一个简单的位置值。在我的其他应用程序将继续运行的情况下,Xamarin 中的应用程序将锁定并最终崩溃。如果它注释掉 Label.Text 分配,应用程序将继续运行而不会崩溃。
这是我的 Xamarin 代码,是否有更好的方法来处理分配?
// Event Handler to the ApplicationMessageRecevied event
client.ApplicationMessageReceived += (s, e) =>
{
StatusLabel.Text = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
};
解决方案
我发现使用以下方法分配标签效果很好。我的发布者正在以 2ms 的间隔发送消息,并且手表稳定!
Device.BeginInvokeOnMainThread(() => {
PositionData.Text = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
});
推荐阅读
- laravel - hasManyThrough() 仅使用第一个“通过”关系
- reactjs - inovua 反应数据网格-更改默认字体大小
- powershell - 如何导入密钥保管库访问策略?
- angular - afterAll TypeError 中引发错误:无法读取未定义的属性(读取“toLowerCase”)
- c# - 异步写入和读取流
- python - 如何在同步代码中调用异步函数并中断异步/等待链(即如何将异步函数包装在同步函数中)
- html - Angular 反应式表单控制值只是用户键入的内容?
- python - 使用 Apache Beam 的“ReadFromText”解析包含“\n”的行
- pandas - 格式化数据框 Pandas
- .net - 如何在 ChromeDriver 预期的位置安装 Chrome?