在Smobiler的开发中,控件或组件及客户端功能都是通过事件或委托来进行处理的。
Smobiler是基于异步非阻塞的方式来运行的
下面我们分别对Windows的和Smobiler的MessageBox的处理方法来举例说明。
Windows的MessageBox方法
<!--[if !supportLists]-->l <!--[endif]-->开发过Windows的都比较熟悉MessageBox,在MessageBox.Show后面可以直接对选择的值进行判断并后续处理,如下的代码
if (System.Windows.Forms.MessageBox.Show("MessageBox", "Yes/No", MessageBoxButtons.YesNo) == DialogResult.Yes) { } MessageBox.Show("After MessageBox");
<!--[if !supportLists]-->l <!--[endif]-->上面的代码在电脑上会先弹出MessageBox,点击是或否后,会再弹出After MessageBox,如下图
Smobiler的MessageBox方法
<!--[if !supportLists]-->l <!--[endif]-->但是在Smobiler中,MessageBox.Show方法是void的,就代表是没有返回值的。那么怎么获取MessageBox选中的值呢?我们先看如下的代码。
MessageBox.Show("异步说明示例", "显示一个是和否的对话框", MessageBoxButtons.YesNo); Toast("客户端点击的结果是?");
<!--[if !supportLists]-->l <!--[endif]-->上面的代码打开Smobiler客户端连接并测试后,会发现,出现“异步说明示例”的对话框的同时,也会出现一个“客户端点击的结果是?”的提示。如下的显示。
Smobiler与Winform的对话框差异
<!--[if !supportLists]-->l <!--[endif]-->这是为什么呢?我们下面会说明
<!--[if !supportLists]-->n <!--[endif]-->Windows的代码运行在Windows操作系统中,是单机的,它是基于UI线程阻塞的,在弹出提示框时,在你没有在界面上点击时,它当前的UI线程是处于等待状态,直到你界面上点击提示框后,这个线程才会恢复,后面的代码也才接着执行。如下图所示例。
<!--[if !supportLists]-->n <!--[endif]-->Smobiler分别有客户端和服务端,服务端上需要客户端显示MessageBox时,需要先告诉客户端要显示,客户端上用户点击后再向服务端发送点击事件,服务端调用代码,其实Smobiler也可以做成线程阻塞的方式,但是Smobiler服务端不像Windows桌面程序一样只有一个UI线程,它还包含了所有的客户端,如果使用了UI线程阻塞,那么每一个客户端都需要有一个阻塞线程,这对Smobiler服务端的运行会造成很大的性能问题(即服务端需要维持线程一直处于等待状态)。所以Smobiler在设计之初,就使用了异步非阻塞的方式。
Smobiler的异步非阻塞方式
<!--[if !supportLists]-->l <!--[endif]-->基于上面的代码进行优化,让它先弹出在弹出SmoMessageBox,再选择完成后再弹出After MessageBox,效果如下面的动图。
MessageBox.Show("异步说明示例", "显示一个是和否的对话框", MessageBoxButtons.YesNo, (obj, args) => { Toast("客户端点击的结果是" + args.Result.ToString()); }); Toast("这个和对话框是同时显示的");
<!--[if !supportLists]-->l <!--[endif]-->你会发现Smobiler在MessageBox.Show的最后面是一个匿名方法(这是一个委托实例,如果对委托不太明白可以先补充一下这方面的相关知识),这就是异步回调,即在客户端用户点击SmoMessageBox后,要触发的后续操作,就需要写到这个匿名方法中(也可以是委托实例)。如下图所示。
<!--[if !supportLists]-->l <!--[endif]-->在Smobiler的很多功能中都需要使用这种方式,比如this.Client.GetClipboard获取剪切板的数据,就需要在回调中获取当前的数据。或this.Client.GetNetWorkType获取网络类型等方法。
相关推荐
小程序商城系统源码,基于.Net 5.0、Uni-App开发,支持可视化布局,前后端分离,支持分布式部署,跨平台运行,拥有分销、代理、团购、拼团、秒杀、直播、优惠券、自定义表单等众多营销功能,拥有完整SKU、下单、售后...
住哪儿APP及后台管理系统:基于.NET Core开发,包含912个文件,包括168个C#类文件、107个DLL文件、91个PNG图像文件、77个GIF图像文件、59个JavaScript文件、58个Vue组件文件、49个XML配置文件、49个CSS样式文件、41...
.net快速开发框架,包含.net 工作流 App 接口, 操作文档中更新了前端插件的信息已经官网地址以便大家查看学习
Bringing Quality Products to Market Faster -使用Visual Studio .NET 快速开发应用程序(PPT) <br>快速应用程序开发 (RAD) 概念 Visual Studio .NET中的RAD工具 Micorsoft Visio 代码生成和反向工程
《#企业应用开发艺术CSLA.NET框架开发实战》(Expert C#2008 Business Objects)配套源码及例程csla-4.5.700。 CSLA .NET is a software development framework that helps you build a reusable, maintainable ...
基于ASP.NET的app接口实例
于翔编著,青软实训组编。先讲了.NET和开发环境然后讲C#,然后讲windows forms。
基于C#.NET写的天气APP的源码.zip基于C#.NET写的天气APP的源码.zip基于C#.NET写的天气APP的源码.zip基于C#.NET写的天气APP的源码.zip基于C#.NET写的天气APP的源码.zip基于C#.NET写的天气APP的源码.zip
基于.Net 5.0、Uni-App开发,支持可视化布局的小程序商城系统,前后端分离,支持分布式部署,跨平台运行,拥有分销、代理、团购、拼团、秒杀、直播、优惠券、自定义表单等众多营销功能,拥有完整SKU、下单、售后、...
asp.net ,异步多图多文件上传案例,已经应用到自己的项目中。
之前写过支付宝app支付的支付的后台代码,现在来说一下异步通知: 个人感觉支付宝的异步通知,步骤比微信简单点,但里面的坑可是没少多少,就一个验签就把我整的快疯了…. 异步通知: 1,先确定在支付的时候写的回调地址...
资产管理开源项目,移动端APP,支持Android、iOS,基于.NET(C#、VB)。SmoSEC资产管理系统包含的功能有:资产列表、借用、归还、领用、退库、维修、报废、调拨、盘点、分类管理,区域管理,部门管理,耗材列表、...
C#。net开发的windows mobile手机例子,使用sqlce数据库 易懂
基于.NET的社区便利商店APP后台管理的设计与实现.pdf
基于 Asp.Net Core 7.0、Uni-App开发,支持可视化布局的小程序商城系统,前后端分离,支持分布式部署,跨平台运行,拥有分销、代理、团购、拼团、秒杀、直播、优惠券、自定义表单等众多营销功能,拥有完整SKU、下单...
c#/.net 微信app支付服务端开发Demo。结合官方的demo修改的。本人亲测,已经线上使用。
仓库管理系统,移动端APP开源项目,支持Android、OS,基于.NET(C#、VB)。SmoWMS仓库管理系统包含了仓库管理、订单、主数据维护、图表分析、个人信息等几大功能。 SmoWMS is Warehouse Management solution for AP...
EasyPlat.Net提供基于DATASET的三层结构,可以通过直接使用BizSQL进行两层开发。包含账号、角色、权 限,菜单管理;导入、导出、打印、加密等方法;公共字典、XML字典使用;多种打印、导入导出、图表支持, 日志...
一个基于ASP.Net实现的PDA Browser Control 程序代码