Xamarin进度对话框没有按预期显示

时间:2016-04-24 06:01:53

标签: c# android xamarin progressdialog

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

.filter()

有时会出现进度对话框,有时则不会出现。大多数情况下,它第一次出现并且没有出现。它第二次挂断了。

如果在所有对话框中显示它没有旋转,它看起来像一些静态图像。

问题1)如何使此对话框始终显示? 问题2)如何进行旋转?

注意:我尝试将progressDialog.Dismiss()保留在另一个RunOnUiThread()内部以及线程外部。两种方式都失败了。

1 个答案:

答案 0 :(得分:4)

我怀疑你的for (int i = 0; i < 100; i++)循环发生得如此之快,以至于UI没有机会更新屏幕。尝试添加await Task.Delay (50);来模拟Thread中发生的更多工作。

实施例

new Thread (new ThreadStart (delegate {
    RunOnUiThread (async() => {
        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 ();

enter image description here

注意:除非Thread中的某些内容实际更新了UI的内容,否则您可以删除RunOnUiThread代理,因为它不需要。

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

即使对话解雇也不需要包装,因为对话框的Activity / Fragment解雇使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 ();