我正在尝试在长时间操作运行时通过Toast显示等待消息。我正在使用BackgroundWorker。 此代码位于ListView_ItemClick事件处理程序中:
var bgWait = new BackgroundWorker();
bgWait.DoWork += bgWait_DoWork;
bgWait.RunWorkerAsync();
bgWait.RunWorkerCompleted += bgWait_Completed;
bgWait_DoWork事件处理程序中的代码如下:
private void bgWait_DoWork(object sender, DoWorkEventArgs e)
{
var toastWait = Toast.MakeText(this, "Please wait", ToastLength.Long);
toastWait.SetGravity(GravityFlags.Top & GravityFlags.Center, 0, 0);
toastWait.Show();
TimeConsumingOperation();
toastWait.Cancel();
}
当我在调试模式下运行时,似乎只到达了bgWait_DoWork的第一行 - “var toastWait = Toast.MakeText(this,”Please wait“,ToastLength.Long);” - 然后它跳转到bgWait_Completed事件处理程序。
知道为什么会这样吗?
由于
答案 0 :(得分:2)
您从辅助线程调用与UI相关的API(bgWait_DoWork在辅助线程上执行)。
你必须做这样的事情:
private void bgWait_DoWork(object sender, DoWorkEventArgs e)
{
Toast toastWait = null;
RunOnUIThread (() =>
{
toastWait = Toast.MakeText(this, "Please wait", ToastLength.Long);
toastWait.SetGravity(GravityFlags.Top & GravityFlags.Center, 0, 0);
toastWait.Show();
});
TimeConsumingOperation();
RunOnUIThread (() =>
{
toastWait.Cancel();
});
}
}