Xamarin.Android:ProgressDialog 不显示
Posted
技术标签:
【中文标题】Xamarin.Android:ProgressDialog 不显示【英文标题】:Xamarin.Android: ProgressDialog does not show up 【发布时间】:2018-11-03 18:35:05 【问题描述】:我无法显示 ProgressDialog:
下面的 sn-p 示例显示了我的代码:
public override void OnActivityCreated(Bundle savedInstanceState)
base.OnActivityCreated(savedInstanceState);
progressDialog = new ProgressDialog(Context);
progressDialog.SetCancelable(false);
progressDialog.SetMessage("Saving ...");
private void Method()
progressDialog.Show();
var testDialog = progressDialog.IsShowing;
SaveImage();
private void SaveImage()
// does lot
...
// especially this method takes some time
mutableBitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
我创建了一个 ProgressDialog,我想在调用 SaveImage 方法之前显示它(并在 SaveImage 完成时取消它)。
我的问题是在 SaveImage 方法完成之前不会显示 ProgressDialog。
在调试模式下,progressDialog.IsShowing 为 true,在调用 SaveImage-方法之前,但不显示。
【问题讨论】:
【参考方案1】:您必须将与 IO 相关的代码转移到后台线程,您可以为此使用异步任务
private class AsyncTaskRunner extends AsyncTask<String, String, String>
private String resp;
ProgressDialog progressDialog;
@Override
protected String doInBackground(String... params)
saveImage();
@Override
protected void onPostExecute(String result)
// execution of result of Long time consuming operation
progressDialog.dismiss();
@Override
protected void onPreExecute()
progressDialog = ProgressDialog.show(getContext(),
"ProgressDialog",
"Loading");
【讨论】:
我正在处理一个 DialogFragment,我怎样才能在这里获得我的上下文 嗨,@K.Dexter。属性Activity
是你的Context
,或者你可以使用构造方法,比如public AsyncTaskRunner(Context c)。
DialogFragment 有自己的上下文。您可以只使用 getContext()。我已经编辑了我的答案【参考方案2】:
我找到了一个适合我的解决方案:
private async void Method()
progressDialog.Show();
var thread = new System.Threading.Thread(new ThreadStart(delegate
SaveImage();
));
thread.Start();
while(thread.ThreadState == ThreadState.Running)
await Task.Delay(100);
progressDialog.Dismiss();
同时,我将此代码外包给public static class ThreadHelper
,它只需要一个Action(在本例中为SaveImage())和一个ProgressDialog 作为参数。
【讨论】:
以上是关于Xamarin.Android:ProgressDialog 不显示的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?
xamarin android开发 两个按钮 怎么放在同一排上
抽屉布局在 Xamarin.Android.Support.Core.UI 和 Xamarin.Android.Support.V4 中都存在
无法使用 Xamarin.Android 中的 Xamarin.Mobile 组件保存联系人
将Xamarin.Android应用程序迁移到Xamarin.Forms应用程序
dotnet 5 和 Xamarin Android:找不到导入的项目“Xamarin.Android.CSharp.targets”