Raj*_*rri 3 c# android progressdialog xamarin
单击菜单项时,我需要更新多个 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);
}
}
Run Code Online (Sandbox Code Playgroud)
有时会出现进度对话框,有时不会。大多数情况下它是第一次出现,然后没有出现。第二次挂了。
如果出现所有对话框,它就不会旋转,并且看起来像一些静态图像。
问题 1) 如何使此对话框始终出现?
问题 2) 我怎样才能使这个旋转?
注意:我尝试将 progressDialog.Dismiss() 保持在另一个 RunOnUiThread() 内和线程外。两种方式都失败了。
我怀疑您的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 ();
Run Code Online (Sandbox Code Playgroud)
注意:除非您的某些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 ();
Run Code Online (Sandbox Code Playgroud)
甚至不需要包装对话框关闭,因为对话框的 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 ();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6118 次 |
最近记录: |