基于.NET的APP开发和Windows开发,异步回调差别

简介: Smobiler中的异步回调机制在Smobiler的开发中,控件或组件及客户端功能都是通过事件或委托来进行处理的。Smobiler是基于异步非阻塞的方式来运行的下面我们分别对Windows的和Smobiler的MessageBox的处理方法来举例说明。

Smobiler中的异步回调机制

在Smobiler的开发中,控件或组件及客户端功能都是通过事件或委托来进行处理的。

Smobiler是基于异步非阻塞的方式来运行的

  • 下面我们分别对Windows的和Smobiler的MessageBox的处理方法来举例说明。
Windows的MessageBox方法
  • 开发过Windows的都比较熟悉MessageBox,在MessageBox.Show后面可以直接对选择的值进行判断并后续处理,如下的代码
            if (System.Windows.Forms.MessageBox.Show("MessageBox", "Yes/No", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {

            }
            MessageBox.Show("After MessageBox");
  • 上面的代码在电脑上会先弹出MessageBox,点击是或否后,会再弹出After MessageBox,如下图


Smobiler的MessageBox方法

  • 但是在Smobiler中,MessageBox.Show方法是void的,就代表是没有返回值的。那么怎么获取MessageBox选中的值呢?我们先看如下的代码。
            MessageBox.Show("异步说明示例", "显示一个是和否的对话框", MessageBoxButtons.YesNo);
            Toast("客户端点击的结果是?");
  • 上面的代码打开Smobiler客户端连接并测试后,会发现,出现“异步说明示例”的对话框的同时,也会出现一个“客户端点击的结果是?”的提示。如下的显示。

Smobiler与Winform的对话框差异

  • 这是为什么呢?我们下面会说明

    • Windows的代码运行在Windows操作系统中,是单机的,它是基于UI线程阻塞的,在弹出提示框时,在你没有在界面上点击时,它当前的UI线程是处于等待状态,直到你界面上点击提示框后,这个线程才会恢复,后面的代码也才接着执行。如下图所示例。

* Smobiler分别有客户端和服务端,服务端上需要客户端显示MessageBox时,需要先告诉客户端要显示,客户端上用户点击后再向服务端发送点击事件,服务端调用代码,其实Smobiler也可以做成线程阻塞的方式,但是Smobiler服务端不像Windows桌面程序一样只有一个UI线程,它还包含了所有的客户端,如果使用了UI线程阻塞,那么每一个客户端都需要有一个阻塞线程,这对Smobiler服务端的运行会造成很大的性能问题(即服务端需要维持线程一直处于等待状态)。所以Smobiler在设计之初,就使用了异步非阻塞的方式。

Smobiler的异步非阻塞方式

  • 基于上面的代码进行优化,让它先弹出在弹出SmoMessageBox,再选择完成后再弹出After MessageBox,效果如下面的动图。
            MessageBox.Show("异步说明示例", "显示一个是和否的对话框", MessageBoxButtons.YesNo, (obj, args) =>
            {
                Toast("客户端点击的结果是" + args.Result.ToString());
            });
            Toast("这个和对话框是同时显示的");

  • 你会发现Smobiler在MessageBox.Show的最后面是一个匿名方法(这是一个委托实例,如果对委托不太明白可以先补充一下这方面的相关知识),这就是异步回调,即在客户端用户点击SmoMessageBox后,要触发的后续操作,就需要写到这个匿名方法中(也可以是委托实例)。如下图所示。

  • 在Smobiler的很多功能中都需要使用这种方式,比如this.Client.GetClipboard获取剪切板的数据,就需要在回调中获取当前的数据。或this.Client.GetNetWorkType获取网络类型等方法。
相关文章
|
18天前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
18天前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
88 3
|
1月前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
1月前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
1月前
|
SQL 开发框架 数据可视化
企业应用开发中.NET EF常用哪种模式?
企业应用开发中.NET EF常用哪种模式?
|
11天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
1月前
|
Java Android开发 开发者
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
36 3
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
1月前
|
数据安全/隐私保护 Windows
.net三层架构开发步骤
.net三层架构开发步骤
13 0

热门文章

最新文章