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

在Smobiler的开发中,控件或组件及客户端功能都是通过事件或委托来进行处理的。
Smobiler是基于异步非阻塞的方式来运行的
下面我们分别对Windows的和Smobiler的MessageBox的处理方法来举例说明。
Windows的MessageBox方法
l 开发过Windows的都比较熟悉MessageBox,在MessageBox.Show后面可以直接对选择的值进行判断并后续处理,如下的代码
if (System.Windows.Forms.MessageBox.Show("MessageBox", "Yes/No", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
}
MessageBox.Show("After MessageBox");
l 上面的代码在电脑上会先弹出MessageBox,点击是或否后,会再弹出After MessageBox,如下图

Smobiler的MessageBox方法
l 但是在Smobiler中,MessageBox.Show方法是void的,就代表是没有返回值的。那么怎么获取MessageBox选中的值呢?我们先看如下的代码。
MessageBox.Show("异步说明示例", "显示一个是和否的对话框", MessageBoxButtons.YesNo);
Toast("客户端点击的结果是?");
l 上面的代码打开Smobiler客户端连接并测试后,会发现,出现“异步说明示例”的对话框的同时,也会出现一个“客户端点击的结果是?”的提示。如下的显示。
Smobiler与Winform的对话框差异
l 这是为什么呢?我们下面会说明
Windows的代码运行在Windows操作系统中,是单机的,它是基于UI线程阻塞的,在弹出提示框时,在你没有在界面上点击时,它当前的UI线程是处于等待状态,直到你界面上点击提示框后,这个线程才会恢复,后面的代码也才接着执行。如下图所示例。

Smobiler分别有客户端和服务端,服务端上需要客户端显示MessageBox时,需要先告诉客户端要显示,客户端上用户点击后再向服务端发送点击事件,服务端调用代码,其实Smobiler也可以做成线程阻塞的方式,但是Smobiler服务端不像Windows桌面程序一样只有一个UI线程,它还包含了所有的客户端,如果使用了UI线程阻塞,那么每一个客户端都需要有一个阻塞线程,这对Smobiler服务端的运行会造成很大的性能问题(即服务端需要维持线程一直处于等待状态)。所以Smobiler在设计之初,就使用了异步非阻塞的方式。
Smobiler的异步非阻塞方式
l 基于上面的代码进行优化,让它先弹出在弹出SmoMessageBox,再选择完成后再弹出After MessageBox,效果如下面的动图。
MessageBox.Show("异步说明示例", "显示一个是和否的对话框", MessageBoxButtons.YesNo, (obj, args) =>
{
Toast("客户端点击的结果是" + args.Result.ToString());
});
Toast("这个和对话框是同时显示的");

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

l 在Smobiler的很多功能中都需要使用这种方式,比如this.Client.GetClipboard获取剪切板的数据,就需要在回调中获取当前的数据。或this.Client.GetNetWorkType获取网络类型等方法。
基于.NET的APP开发和Windows开发,异步回调差别的更多相关文章
- Smobiler与Windows的异步回调差别
Smobiler与Windows的异步回调差别--基于.NET的APP开发和Windows开发差别 基于.NET的APP开发和Windows开发,异步回调差别 Windows app开发 异步回调 S ...
- spring boot + vue + element-ui全栈开发入门——windows开发环境
一.node.js开发环境 windows系统,去网站https://nodejs.org/en/download/,下载对应的安装程序,并安装Windows Installer (.msi) 接下 ...
- 用.NET开发通用Windows App
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:随着Windows 10的正式发布,作为.NET开发人员应该开始或多或少了解一下通用( ...
- 使用 Portable Class Library(可移植类库)开发 Universal Windows App
今天在这里跟大家聊聊关于 Windows Universal 应用夸平台的问题,首先Universal Windows App的定义相信大家已经有所了解了(如果你是一个刚刚接触 Universal A ...
- 你知道吗?使用任何HTML5开发工具都可开发iOS、Android原生App
APICloud App开发平台一直在不断升级开发工具库,这一年增加了众多开发工具.目的就是让开发者可以选择使用任何自己喜欢的HTML5开发工具去开发App.这次,APICloud把所有关于开发工具的 ...
- 翻译:打造基于Sublime Text 3的全能python开发环境
原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ...
- 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)
☆ 写在前面 之前答应大家的毕业答辩之后把所有文档贡献出来,现在答辩已过,LZ信守承诺,把所有文档开源到了GitHub(这个地址包含所有的代码和文档以及PPT,外层为简单的代码).还望喜欢的朋友们,不 ...
- [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]
由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...
- [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]
由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...
随机推荐
- JavaScrip对象
一.JavaScript对象概述 JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...此外,JavaScript 允许自定义对象.JavaScript 提供多个内建对象,比如 S ...
- Java并发之Condition
在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式.Condition接口 ...
- 【NumberValidators】大陆身份证验证
需要说明的是这里的大陆身份证识别并不是公安局联网的识别,而是按国标GB 11643进行的验证,所以其验证结果只能说符合国标规范,但不能保证该身份证一定真实存在,如果你实际需求是希望身份证一定真实存在, ...
- MySql Query Cache 优化
query cache原理 当mysql接收到一条select类型的query时,mysql会对这条query进行hash计算而得到一个hash值,然后通过该hash值到query cache中去匹配 ...
- virsh命令来创建虚拟机
virsh命令来创建虚拟机步骤 (1)生成硬盘镜像文件: 格式:raw或qcow2 # qemu-img create -f raw fdisk.img 10G qemu-img convert re ...
- dmraid 用法
dmraid 全名为设备对应器磁盘阵列(Device Mapper RAID),利用Linux内核提供的设备对应器(Device Mapper)机制 ,为多种磁盘阵列设备提供磁盘阵列的设备文件,让用户 ...
- 聊一聊顺序消息(RocketMQ顺序消息的实现机制)
当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系. 比如事件A发生在下午3点一刻,而事件B发生在下午4点,那么我们认为事件A发生在事件B之前, ...
- 配置服务器nginx 教程
https://www.cnblogs.com/wangzhongqiu/p/6527346.html
- 安装scrapy出错Failed building wheel for Twisted
用64位windows10的CMD命令安装pip install scrapy出错: Running setup.py bdist_wheel for Twisted ... error Failed ...
- windows server 2012 R2汉化 -- 玩转Microsoft Azure
Microsoft Azure 试用版小试牛刀 首先需要申请一个账号获得试用权 我这里是1元免费试用, 进入后就可以创建自己的虚拟机及数据库 在这里先说创建的windows server 2012 R ...