在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获取网络类型等方法。
相关推荐
ASP.NET Core是基于.NET Core构建的下一代Web框架,它轻量级、模块化且性能高效,适用于构建RESTful API和Web应用。 在"Alipay.AopSdk.Core-master"这个压缩包中,包含了支付宝的官方SDK,用于与支付宝服务器进行...
11.4.3 移除项目回调 11.4.4 理解SQL缓存通知 11.4.5 缓存通知的工作方式 11.4.6 启用通知 11.4.7 创建缓存依赖 11.5 自定义缓存依赖 11.5.1 基本的自定义缓存依赖 11.5.2 使用消息队列的自定义缓存...
这个平台的主要语言之一是C#,一种面向对象的编程语言,广泛应用于Windows应用开发、Web服务和移动应用等领域。以下是对.NET Framework及C#相关知识点的详细阐述: 1. .NET Framework架构: .NET Framework的核心...
11.4.3 移除项目回调 381 11.4.4 理解SQL缓存通知 383 11.4.5 缓存通知的工作方式 384 11.4.6 启用通知 384 11.4.7 创建缓存依赖 385 11.5 自定义缓存依赖 386 11.5.1 基本的自定义缓存依赖 386 ...
4.5.1 比较典型的回送和回调 104 4.5.2 使用回调功能:一种简单的方法 105 4.5.3 使用带参数的回调功能 110 4.6 小结 113 第5章 ASP.NET Web服务器控件 115 5.1 Web服务器控件概述 115 5.2 Label服务器控件 ...
4.5.1 比较典型的回送和回调104 4.5.2 使用回调功能: 一种简单的方法105 4.5.3 使用带参数的回调功能110 4.6 小结113 第5章 ASP.NET Web服务器控件115 5.1 Web服务器控件概述115 5.2 Label服务器控件116 5.3 ...
Windows Communication Foundation(WCF)是微软.NET框架中用于构建分布式应用程序的服务模型。它提供了一种统一的方式,通过网络在不同的应用程序之间交换数据。本实例将深入探讨如何在WCF中实现同步和异步调用,...
8. **异步编程**:C#引入了async和await关键字,使得异步编程变得更加简单和直观,避免了传统的回调地狱问题。 9. **.NET框架与Core**:C#是.NET框架和.NET Core的主要开发语言。.NET Framework提供了丰富的库和...
4. **异步通信**:由于Silverlight的跨域限制,所有与服务端的通信必须是异步的,这意味着在调用服务方法后,需要提供回调函数处理响应。 5. **数据绑定**:在Silverlight用户界面中,可以使用MVVM(Model-View-...
- 使用回调接口或异步操作,让服务端可以主动推送消息到客户端,实现即时通信。 - 考虑到并发和多线程问题,确保服务端处理多个客户端请求的正确性。 4. **安全与性能优化**: - 应用身份验证和授权机制,保证...
- 为了确保交易状态的实时性和准确性,平台需要实现支付状态的同步和异步更新机制,例如通过回调通知来更新订单状态。 9. **JumbotPay** - “JumbotPay”可能是此项目的内部名称或代码库名称,它可能包含了所有...
6. **事件和委托**:C#中的事件处理机制使得组件之间能够异步通信,而委托则是事件的基础,是一种类型安全的回调机制。 7. **LINQ (Language Integrated Query)**:一种强大的查询数据的方式,可以简化对集合、...
- **双工通信**:允许服务与客户端双向通信,实现回调功能。 - **消息队列**:通过MSMQ实现异步处理和消息持久化,提高系统可靠性。 - **路由服务**:作为中介,转发请求到适当的后端服务,实现负载均衡和故障切换。...
在IT行业中,Silverlight是一种基于.NET Framework的浏览器插件,由微软开发,用于创建丰富的、交互式的用户界面,类似于Adobe Flash。WCF(Windows Communication Foundation)则是微软提供的一种全面的服务导向...
WCF服务编程是开发人员掌握的关键技能之一,它涵盖了如何创建、配置和服务托管,以及如何与不同传输协议、消息交换模式和安全机制交互。 首先,WCF的核心概念包括服务合同、绑定、终结点和行为。服务合同定义了服务...
- 使用回调或现代的反应式编程库如`RxJava`处理异步操作的结果。 7. **性能优化**: - 使用GZIP压缩减少网络数据传输量。 - 缓存策略以减少不必要的网络请求。 8. **测试与调试**: - 使用工具如Postman测试...
这些信息可以通过SDK的回调函数获取,然后在界面上绘制出人脸框,以可视化检测结果。 6. **图像识别**: 除了人脸检测,还可以调用人像识别API,获取更丰富的信息,比如人脸的属性(性别、年龄、表情等)。将返回...
5. **异步编程**:C#引入了async/await关键字,使得异步编程更加简单,避免了复杂的回调函数,提高了程序的响应速度。 6. **安全性**:C#支持代码签名和权限模型,确保了代码的安全执行。 7. **泛型**:C#的泛型...