如何从按钮事件(或其他任务)更新UI

时间:2016-07-16 22:18:15

标签: ios xamarin

我的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。 我该怎么做?

1 个答案:

答案 0 :(得分:0)

使用async修饰按钮事件方法,如下所示:

private async void EventSendRegisterRequest(string username, string email, string password)

然后在该方法中进行更新,如下所示:

InvokeOnMainThread(() => {
  TextResponseRegister.Text = "Sending.";
});

解决了我的问题。现在,所有内容都直接显示在UI上。