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.IsShowingtrue,在调用 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”