我的Xamarin应用程序有两个按钮。按钮A和按钮B。两者都可以启动长时间运行的任务。我想通过将按钮文本更改为“正在工作”,并在任务结束后将其更改回给用户,以表明该任务正在运行。
当我单击按钮A时,我得到了代码:
btnA.Text="Working";
但这不会导致btnA文本显示“正在工作”。
如果我在统计“按钮A”任务的过程中包括以下内容:
btnB.Text="Working";
那行得通。当我做相反的操作时,即,使用Working更新btnB,同时按下Button B时将btnA更新为Working,相反的情况是Button B的文本保持不变,Button A的文本更改为Working。
我尝试过直接设置按钮文字或使用
RunOnUiThread(() => btnA.Text = "Working");
未按下任何按钮时,我可以更新其文本,但不能更新所按下按钮的文本。
答案 0 :(得分:0)
根据您的描述,您想在单击和任务完成时更改按钮文本,但是我不知道您在哪里修改按钮文本,我做了一个关于运行长任务并在此处更改按钮文本的示例。您可以查看是否需要您的需求。
private void Button_Clicked(object sender, EventArgs e)
{
btna.Text = "Wait";
Task.Run(() => method1());
Console.WriteLine("UI thread is not block");
}
private async void method1()
{
await Task.Run(async () =>
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("the data is {0}", i);
await Task.Delay(1000);
}
});
Console.WriteLine("the task is done!");
Device.BeginInvokeOnMainThread(() =>
{
btna.Text = "Done";
});
}
您可以看到单击时可以更改Button的文本,也可以使用 Device.BeginInvokeOnMainThread()
完成长时间的任务后更改Button的文本。