当前位置: 移动技术网 > IT编程>开发语言>.net > 基于.NET的APP开发和Windows开发,异步回调差别

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

2019年03月23日  | 移动技术网IT编程  | 我要评论

山西电视台经济资讯频道,涟漪网上订水,欧洲城北京赛车

 

在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获取网络类型等方法。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网