我的活动中有以下观点:
private Button btn;
private TextView txtView;
我有以下按钮单击事件:
private async void Btn_Click(object sender, System.EventArgs e)
{
var mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
string str;
await Task.Run((() => str = Foo()));
// Alternatively
// await Task.Delay(10000);
mDialog.Dismiss();
txtView.Text = str;
}
我还有以下方法:
string Foo()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
return "hello";
}
我想要的是将txtView.Text
解雇后将hello
设置为ProgressDialog
答案 0 :(得分:0)
Task.Run
并不是要像它那样被使用,就是将指定的工作排队在ThreadPool上运行,并为该工作返回一个任务或Task<TResult>
句柄。
您应该做的是制作一个返回类型为Task<string>
的方法,然后等待该方法
然后使用该方法更新您的textview数据
答案 1 :(得分:0)
解决方案:
您可以通过关闭SetOnDismissListener
后使用ProgressDialog
来设置关闭监听器。
首先,让您的活动继承自IDialogInterfaceOnDismissListener
:
public class MainActivity : AppCompatActivity, IDialogInterfaceOnDismissListener
在按钮单击事件中,将activity
设置为listener
:
private async void Btn_Click(object sender, System.EventArgs e)
{
var mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
//set your activity as the listener
mDialog.SetOnDismissListener(this);
mDialog.Show();
await Task.Delay(10000);
mDialog.Dismiss();
}
然后,您应该实现interface(IDialogInterfaceOnDismissListener
)成员OnDismiss
,在此函数中,您可以在关闭ProgressDialog之后执行您想做的任何事情:
public void OnDismiss(IDialogInterface dialog)
{
Toast.MakeText(this, "You used the 'SetOnDismissListener'.", ToastLength.Long).Show();
txtView.Text = "hello";
}
您可以参考: