【发布时间】:2019-04-06 12:17:33
【问题描述】:
帖子已被重写以更好地适应当前的问题。
我有一个按钮x:Name="selectVesselButton"。单击按钮时,它会尝试建立与服务器的连接,这需要一两秒钟的时间。最初,我希望按钮在从连接下载和反序列化 json 文件时显示为灰色。
我的旧代码(异步之前,并尝试更新按钮):
// disabling the button to prevent spam clicking.
string buttonText = selectVesselButton.Text;
selectVesselButton.IsEnabled = false;
selectVesselButton.Text = "loading...";
// retrieve data for speed page.
RetrieveData();
// redirect to next info block if build was successfull.
FocusSpeedblock();
// enabling the button again.
selectVesselButton.Text = buttonText;
selectVesselButton.IsEnabled = true;
此代码的问题是按钮视觉效果在 RetrieveData() 完成之前没有更新,完全违背了这样做的目的。这是因为更新接口的代码和下载和反序列化对象的代码都在同一个线程上。
但是,按照 Ivan 的建议,我进行了异步下载和反序列化,从而解决了这个问题(更像是移动了它)。
这很好用,但我仍然在自动更新界面时遇到了一些问题。我有一些标签需要根据 json 文件输出进行更新。标签的值在背景上更新,但只有在我与标签交互时才会在视觉上更新(即滚动它们所在的滚动视图)。查看编辑 3 了解更多详情。
编辑 3:
当第二个线程完成后,它应该调用 UpdateSpeedLabels() 并更新一些标签。但是,它们在代码隐藏中更新,而不是立即更新界面。只有当我与这些标签交互时,它们才会更新。
【问题讨论】:
-
另外请注意,不要将两个问题合二为一,因为您的问题将被删除。
-
啊,谢谢。我会在一分钟内将问题分成两部分。
标签: xaml button xamarin.forms interface