Xamarin 进度对话框
Xamarin ProgressDialog
我正在构建 Xamarin
android 应用程序,我有一个功能需要一些时间。
现在,我正在尝试显示 ProgressDialog
并执行该函数。
下面的代码没有显示 ProgressDialog
,我什么也没看到。你能帮帮我吗?
private void BtButton_Click(object sender, System.EventArgs e)
{
ProgressDialog mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
Task t = Task.Run(() => { Foo(); });
t.Wait();
mDialog.Dismiss();
}
private void Foo()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
}
您正在通过调用 t.Wait()
阻塞主线程,可以找到更多信息 here。
相反,您可以这样做:
async void BtButton_Click(object sender, System.EventArgs e)
{
var mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
await Task.Run((() => Foo()));
// Alternatively
// await Task.Delay(10000);
mDialog.Dismiss();
}
void Foo()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
}
P.S.: ProgressDialog
在 API 级别 26 使用替代品中被弃用。
我正在构建 Xamarin
android 应用程序,我有一个功能需要一些时间。
现在,我正在尝试显示 ProgressDialog
并执行该函数。
下面的代码没有显示 ProgressDialog
,我什么也没看到。你能帮帮我吗?
private void BtButton_Click(object sender, System.EventArgs e)
{
ProgressDialog mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
Task t = Task.Run(() => { Foo(); });
t.Wait();
mDialog.Dismiss();
}
private void Foo()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
}
您正在通过调用 t.Wait()
阻塞主线程,可以找到更多信息 here。
相反,您可以这样做:
async void BtButton_Click(object sender, System.EventArgs e)
{
var mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
await Task.Run((() => Foo()));
// Alternatively
// await Task.Delay(10000);
mDialog.Dismiss();
}
void Foo()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
}
P.S.: ProgressDialog
在 API 级别 26 使用替代品中被弃用。