首页 > 其他分享 >Xamarin.Android中使用TaskCompletionSource创建阻塞式的对话框

Xamarin.Android中使用TaskCompletionSource创建阻塞式的对话框

时间:2024-01-30 09:00:27浏览次数:30  
标签:Xamarin 对话框 tcs TaskCompletionSource displayMetrics using Android public

代码如下

using Android.OS;
using Android.Views; 
using Android.Util; 
using Activity = Android.App.Activity;

namespace KangHuiXinCai_FangDai_AndroidScanner
{
    public class Dialog_SettingPassword : Dialog
    {  
        TaskCompletionSource<DialogResult> tcs = new TaskCompletionSource<DialogResult>();
        public Dialog_SettingPassword(Activity context, string mailName, bool retry) : base(context)
        { 
            this.OwnerActivity = context; 
        }

        protected override void OnCreate(Bundle? savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            //隐藏自带标题
            this.RequestWindowFeature((int)WindowFeatures.NoTitle);
            this.SetCanceledOnTouchOutside(false);
            SetContentView(Resource.Layout.dlg_SettingPassword);

            //宽高
            var windowManager = this.OwnerActivity.WindowManager;//.WindowManager;
            DisplayMetrics displayMetrics = new DisplayMetrics();
            windowManager.DefaultDisplay.GetMetrics(displayMetrics);
            Window.SetLayout(displayMetrics.WidthPixels, displayMetrics.HeightPixels / 2);

            //事件
            FindViewById<Button>(Resource.Id.btnCancel).Click += (sender, e) =>
            {
                EndDialog(DialogResult.Cancel);
            };

            FindViewById<Button>(Resource.Id.btnOk).Click += (sender, e) =>
            {
                EndDialog(DialogResult.Ok);
            };
        }

        public void EndDialog(DialogResult result)
        {   
            tcs.SetResult(result); 
            Dismiss();
        }

        public async Task<DialogResult> ShowDialog()
        { 
            Show(); 
            var res = await tcs.Task;
            return res; 
        }
    }

    public enum DialogResult
    {
        Ok,
        Cancel,
    }
}

主要代码

  • 创建TaskCompletionSource

TaskCompletionSource<DialogResult> tcs = new TaskCompletionSource<DialogResult>();

  • 使用它来等待返回结果

var res = await tcs.Task;

return res;

  • 设置它的返回结果

tcs.SetResult(result);

 

翻译

搜索

复制

标签:Xamarin,对话框,tcs,TaskCompletionSource,displayMetrics,using,Android,public
From: https://www.cnblogs.com/fabao/p/17995727

相关文章

  • MFC对话框处理Esc和Enter键,避免对话框关闭
    要在MFC对话框中处理ESC和ENTER消息,避免对话框退出,您可以重写对话框类的PreTranslateMessage函数,并在该函数中处理这些消息。首先,打开对话框类的头文件(.h文件),添加以下声明:afx_msgBOOLPreTranslateMessage(MSG*pMsg);然后在.cpp文件中,实现PreTranslateMessage函数:......
  • MFC 模态对话框
    Frame消息:BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()ON_COMMAND(ID_DIALOG_EXEC,&CMainFrame::OnDialogExec)ON_COMMAND(ID_DIALOG_SHOW,&CMainFrame::OnDialogShow)ON_COMMAND(ID_DIALOG_32773,&CMainFrame::OnDialog3277......
  • 毕设4:导出文件对话框
    一般弹出窗口会用Dialog,但JavaFX的Dialog很难自定义,不如直接弹出一个Stage。分割文件、导出图片和文字三个功能共用一个对话框。于是新增了一个enum区别三个功能。enum可以加方法,还挺好玩的:packagecom.pdfTool.defination;publicenumExportType{SPLIT{@Ove......
  • 在loongxin系统lazarus IDE打开文件对话框出现死机的处理方案
    在loongxin系统使用lazarusIDE打开或保存project等文件出现对话框出现卡死的问题。 原因:loongnixmate桌面有问题和lazarus不兼容,cartoon桌面没这个问题。解决方法:将gtk2-murrine-engine卸载,卸载后lazarus抵足保存或打开文件的对话框已恢复正常,系统主题恢复为原始状态。如果你......
  • MFC 基于对话框的程序如何屏蔽掉 ENTER 键和 ESC 键退出的情况
    重写PreTranslateMessage(MSG*pMsg)函数。protected: HICONm_hIcon; //生成的消息映射函数 virtualBOOLOnInitDialog(); afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam); afx_msgvoidOnPaint(); afx_msgHCURSOROnQueryDragIcon();afx_msgBOOLPreTra......
  • [Winform]在Form里显示模态对话框ModalDialog
    在Form里显示模态Dialog问题如何在WinForm的一个Form里面弹出一个模态Dialog?背景程序的框架是Winform,只有一个窗口MainForm。MainForm里面是一个TabControl,每个TabPage是一个Form,每个TabPage的Form相互独立,互不干扰,TabPage间可以随时切换。由于有某些需求,TabPage需要接受用户......
  • Windows系统中Run对话框输入URL和IP地址的区别
    Windows系统中Run对话框输入URL和IP地址的区别在Windows系统中,我们可以通过Run对话框快速执行一些命令或者打开一些应用程序。当我们在Run对话框中输入URL(比如//www.baidu.com)和IP地址(比如\192.168.3.194)时,两者有一些区别。本篇博客将详细探讨这些区别。1.URL和IP地址的基本概......
  • [WPF]动手写一个简单的消息对话框
    消息对话框是UI界面中不可或缺的组成部分,用于给用户一些提示,警告或者询问的窗口。在WPF中,消息对话框是系统原生(user32.dll)的MessageBox,无法通过Style或者Template来修改消息对话框的外观。因此,当需要一个与应用程序主题风格一致的消息对话框时,只能自己动手造轮子了。确定“轮子......
  • C++ Qt开发:自定义Dialog对话框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍自定义Dialog组件的常用方法及灵活运用。在之前的文章中笔者已经为大家展示了默认Dialog组件的使......
  • C++ Qt开发:标准Dialog对话框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框QInputDialog、QFileDialog这两种对话框组件的常用方法及灵活运用。在Qt中,标准对话......