我的Xamarin iOS故事板上有一个按钮。此按钮在我的代码中触发一个方法。此方法进行HttpClient Web调用,我想对UI进行状态更新,以便用户知道最新情况。
类似:“发送”,“等待回复”, 超时“等等......我有一个UITextView。
我发现了一些声称能够做到这一点的代码,但到目前为止我没有尝试过任何代码。它们仅在整个按钮代码完成运行后更改TextView的值。因此,似乎新文本值已排队但在事件运行时未更改。
我想要执行此操作的方法是这样触发的:
ButtonRegister.TouchUpInside += EventSendRegisterRequest;
这不起作用:
BeginInvokeOnMainThread(() =>
{
TextResponseRegister.Text = "Sending.";
});
这两个都没有:
InvokeOnMainThread(() =>
{
TextResponseRegister.Text = "Sending.";
});
下面是EventSendRegisterRequest
中代码的简化示例:
BeginInvokeOnMainThread(() =>
{
TextResponseRegister.Text = "Sending.";
});
var c = new Communication.Communication();
var taskRegister = Task.Run(async () =>
{
return await c.RegisterUserAsync(username, password, password, email);
});
taskRegister.Wait(5000);
BeginInvokeOnMainThread(() =>
{
TextResponseRegister.Text = "Done.";
});
只显示Done
。
我希望能够从任何任务或UI事件更新UI。 我该怎么做?
答案 0 :(得分:0)
使用async修饰按钮事件方法,如下所示:
private async void EventSendRegisterRequest(string username, string email, string password)
然后在该方法中进行更新,如下所示:
InvokeOnMainThread(() => {
TextResponseRegister.Text = "Sending.";
});
解决了我的问题。现在,所有内容都直接显示在UI上。