【发布时间】:2017-12-21 03:24:10
【问题描述】:
一个非常奇怪的场景......也许有人可以提供帮助。让我头疼。
private string _myText = "Hello";
public string MyText
{
get { return _myText; }
set
{
_myText = value;
OnPropertyChanged();
//OnPropertyChanged("IsSearching");
}
}
我将 MyText 绑定到 XAML Xamarin 视图中的标签,以调试运行此方法时发生的情况。
private async void Edit_Survey_Button_OnClicked(object sender, EventArgs e)
{
MyText = "Text Before Long Method";
Stopwatch s = new Stopwatch();
await Task.Run(() =>
{
s.Start();
Task.Delay(3000).Wait();
MyText = "Text after long method" + s.ElapsedMilliseconds.ToString();
});
}
因此,当单击按钮时,文本会更新,这太棒了,但它只会在 10-15 秒内更新第二次,而应该在 3 秒内更新!我不知道为什么,我已经尝试了很多关于如何运行它的选项,但我想这可能与将 MyText 设置在不同的线程上有关。
我正在做这个测试,因为我将下载数据而不是延迟,并且在数据下载之后,我想从初始状态更改一些 UI 元素。现在我对如何做到这一点非常怀疑,希望其他人也遇到过类似的情况。
________SushiHangover 建议的更新 1
private void Edit_Survey_Button_OnClicked(object sender, EventArgs e)
{
IsSearching = "Method Start Edit";
Task.Run(async () =>
{
await Task.Delay(3000);
Device.BeginInvokeOnMainThread(() => { IsSearching = "Yeeeeehuuuuuuu!"; });
});
}
没有帮助;
【问题讨论】:
-
您使用
.Wait()同步阻塞,请改用await Task.Delay(3000);。然后在您的TaskRun中将MyText分配包装在Device.BeginInvokeOnMainThread中。 -
不幸的是这不起作用
-
不过,这完全有道理,我插入了关于如何实现您提到的内容的更新。不过还是不行。标签会在 20 秒内更新...
-
你试过我的建议了吗?你在 UI 线程上做其他事情吗?
-
是的,我刚才试过了。我所知道的 UI 线程上没有发生任何其他事情。
标签: c# user-interface xamarin