StackLayout sl1 = this.FindByName<StackLayout>("myStackLayout");
sl1.GestureRecognizers.Add(
new TapGestureRecognizer() {
Command = new Command(() => {
Task.Run(() => {
// When this line hits, background is set...
sl1.BackgroundColor = Color.FromHex("CCCCCC");
//this.Refresh(); << force Refresh UI function or something????
Task.Delay(400);
// When this line hits, background is reset...
sl1.BackgroundColor = Color.FromHex("EEEEEE");
});
})
});
当我逐行调试此代码时,上面的代码按预期工作。
但是,当我在不调试的情况下运行此代码时,UI 不会更新 BackgroundColor。
然后,当我尝试调试以查看发生了什么时,它似乎可以工作。
- 为什么不调试就不行?
- 是否有强制更新 UI 的功能?
- 还有其他想法可以达到相同的效果吗?
编辑:
第一次它也有效。
编辑 2(解决方案):
结合使用两个答案,我可以使用以下代码使其工作:
StackLayout sl1 = this.FindByName<StackLayout>("myStackLayout");
sl1.GestureRecognizers.Add(
new TapGestureRecognizer()
{
Command = new Command(async () =>
{
sl1.BackgroundColor = Color.FromHex("#CCCCCC");
await Task.Run(async () => {
await Task.Delay(100);
Device.BeginInvokeOnMainThread(() => {
sl1.BackgroundColor = Color.FromHex("#EEEEEE");
});
});
})
});