C# Xamarin进度对话框未按预期显示

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

单击菜单项时,我需要更新多个EditText视图。代码是这样的。在此过程中,我希望显示一个进度对话框

 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 ();