将 ProgressDialog 与 async/wait、C# Android 结合使用
Using ProgressDialog with async/wait, C# Android
我有一个调用服务器更新数据库的函数,在 return 获取结果之前我等待它完成:
public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
int intRet=-1;
Task<int> tski = PreRegisterDevice(emailAddress);
intRet = await tski;
return intRet;
}
我想做的是在发生这种情况时显示一个进度对话框。但是,一旦我将等待行包装在进度对话框中,它就会允许原始线程在等待的任务完成之前 运行 on 和 return intRet。
public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
int intRet = -1;
Task<int> tski = PreRegisterDevice(emailAddress);
ProgressDialog progressDialog;
progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true);
progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
new Thread(new ThreadStart(async delegate
{
intRet = await tski;
progressDialog.Dismiss();
})).Start();
return intRet;
}
是否有更好的结构化方法,以便 return 行不会在任务完成之前执行。
谢谢。
不确定为什么要创建一个线程,这违背了任务的目的。如果你想在长任务 运行 时显示微调器,只需在显示进度对话框后等待它:
public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
ProgressDialog progressDialog;
progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true);
progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
var intRet = await PreRegisterDevice(emailAddress);
progressDialog.Dismiss();
return intRet;
}
我有一个调用服务器更新数据库的函数,在 return 获取结果之前我等待它完成:
public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
int intRet=-1;
Task<int> tski = PreRegisterDevice(emailAddress);
intRet = await tski;
return intRet;
}
我想做的是在发生这种情况时显示一个进度对话框。但是,一旦我将等待行包装在进度对话框中,它就会允许原始线程在等待的任务完成之前 运行 on 和 return intRet。
public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
int intRet = -1;
Task<int> tski = PreRegisterDevice(emailAddress);
ProgressDialog progressDialog;
progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true);
progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
new Thread(new ThreadStart(async delegate
{
intRet = await tski;
progressDialog.Dismiss();
})).Start();
return intRet;
}
是否有更好的结构化方法,以便 return 行不会在任务完成之前执行。
谢谢。
不确定为什么要创建一个线程,这违背了任务的目的。如果你想在长任务 运行 时显示微调器,只需在显示进度对话框后等待它:
public async Task<int> CarryOutPreRegisterDevice(string emailAddress)
{
ProgressDialog progressDialog;
progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true);
progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
var intRet = await PreRegisterDevice(emailAddress);
progressDialog.Dismiss();
return intRet;
}