C# Xamarin进度对话框未按预期显示
单击菜单项时,我需要更新多个EditText视图。代码是这样的。在此过程中,我希望显示一个进度对话框C# Xamarin进度对话框未按预期显示,c#,android,xamarin,progressdialog,C#,Android,Xamarin,Progressdialog,单击菜单项时,我需要更新多个EditText视图。代码是这样的。在此过程中,我希望显示一个进度对话框 public override bool OnOptionsItemSelected(IMenuItem item) { switch (item.ItemId) { case Resource.Id.updateid: var
public override bool OnOptionsItemSelected(IMenuItem item)
{
switch (item.ItemId)
{
case Resource.Id.updateid:
var progressDialog = ProgressDialog.Show(this, "", "Updating...", true);
progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
new Thread(new ThreadStart(delegate
{
RunOnUiThread(() =>
{
for (int i = 0; i < 100; i++)
{
eTxt[i].Text = slnArray[i].ToString();
}
progressDialog.Dismiss();
}
);
})).Start();
return true;
default:
return base.OnOptionsItemSelected(item);
}
}
public override bool OnOptionsItemSelected(IMenuItem)
{
开关(item.ItemId)
{
案例资源.Id.updateid:
var progressDialog=progressDialog.Show(此为“,”正在更新…”,为true);
progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner);
新线程(新线程开始(代理
{
RunOnUiThread(()=>
{
对于(int i=0;i<100;i++)
{
eTxt[i].Text=slnArray[i].ToString();
}
progressDialog.disclose();
}
);
})).Start();
返回true;
违约:
返回基本选项。OnOptionsItemSelected(项目);
}
}
有时会显示“进度”对话框,有时则不会。大多数情况下,它是第一次出现,之后又没有出现。第二次挂了
若出现任何对话框,它并没有旋转,看起来像一些静态图像
问题1)如何始终显示此对话框
问题2)我怎样才能使这个旋转
注意:我尝试将progressDialog.Disclose()放在另一个RunOnUiThread()内,也放在线程外。这两种方法都失败了。我怀疑您的
for(int I=0;I<100;I++)
循环发生得太快了,UI没有机会更新屏幕。尝试添加等待任务。延迟(50)
模拟线程中发生的更多工作
例子:
甚至对话框取消也不需要包装,因为对话框的活动/片段取消已使UI无效,并且操作系统将在下一帧绘制时对其进行更新:
new Thread (new ThreadStart (async delegate {
for (int i = 0; i < 100; i++) {
// Simulate some work here in order for the progress spinner to update
await Task.Delay (50);
//eTxt[i].Text = slnArray[i].ToString();
}
progressDialog.Dismiss ();
})).Start ();
新线程(新线程开始(异步委托{
对于(int i=0;i<100;i++){
//在此处模拟一些工作,以便更新进度微调器
等待任务。延迟(50);
//eTxt[i].Text=slnArray[i].ToString();
}
progressDialog.disclose();
})).Start();
@RajKarri很高兴它能帮上忙,很高兴编码;-)@寿司宿醉,你有以下想法吗
new Thread (new ThreadStart (async delegate {
for (int i = 0; i < 100; i++) {
// Simulate some work here in order for the progress spinner to update
await Task.Delay (50);
//eTxt[i].Text = slnArray[i].ToString();
}
RunOnUiThread (() => {
progressDialog.Dismiss ();
});
})).Start ();
new Thread (new ThreadStart (async delegate {
for (int i = 0; i < 100; i++) {
// Simulate some work here in order for the progress spinner to update
await Task.Delay (50);
//eTxt[i].Text = slnArray[i].ToString();
}
progressDialog.Dismiss ();
})).Start ();