用于更新ui的异步方法将部分执行

问题描述 投票:0回答:1

[我正在使用xamarin开发一个android应用程序,而我试图做的事情非常简单:单击一个按钮,将其禁用1秒钟。

这是我放在一起的代码的相关部分:

protected override void OnCreate(Bundle savedInstanceState)
{
//...
        sendShortDataButton.Click += (object sender, EventArgs e) => {
                Task.Run(() => DisableButtonFor());               
            };
//...
        private async Task DisableButtonFor()
        {
            sendShortDataButton.Enabled = false; //<------
            await Task.Delay(1000);
            sendShortDataButton.Enabled = true;
        }
}

这里的问题是,通过调试应用程序,代码仅运行到箭头所指向的所有内容被忽略的位置。在该应用程序上,该按钮实际上已被禁用,因此我不确定是否出了问题。

谢谢!

c# android xamarin.android async-await task
1个回答
0
投票

尝试一下:

sendShortDataButton.Click += async (sender, e) =>
{
    var button = (Button)sender;
    button.Enabled = false;
    await Task.Delay(1000);
    button.Enabled = true;
};

如果您仅有的异步工作是等待Task.Run,则您不需要Task.Delay。但是,如果您还有更多异步工作要做,那么最好仅将Task.Run用于此工作:

sendShortDataButton.Click += async (sender, e) =>
{
    var button = (Button)sender;
    button.Enabled = false;
    await Task.Run(async () =>
    {
        await Task.Delay(1000); // Simulate async work
    });
    button.Enabled = true;
};
© www.soinside.com 2019 - 2024. All rights reserved.