Winform业务层如何调用UI层的代码

一、背景介绍

最近在做的Winform项目,请求一个接口,接口中有一个参数是通过执行一段JavaScript获取的,所以,每次调用接口都需要执行一段JavaScript。不是每一次调用接口都会成功,所以需要多次调用直到接口调用成功。

二、普通写法

由于执行JavaScript需要CefSharp,业务层不可能引用CefSharp这个组件,所以循环调用接口就要放在UI层,也只能放在UI层。当多个地方调用这个接口的话,就会有很多冗余的代码。

三、通过Func重构

问题的关键就是如何把执行JavaScript放到业务层,而又不引用CefSharp,所以就需要把方法当做参数传到业务层,在合适的时候调用这个传入的方法。

其实在JavaScript中,传递方法是很简单的,直接传递方法名就行了,在C#里面要用Func或Action封装一下。

执行这个JavaScript需要返回一个字符串,所以方法原型就是Func<string>

        public static Func<string> GetSignFunc()
        {
            return () => { return CEFBrowser.EvaluateScriptAsync(MainForm.cefWebBrowser, "js...").Result.Result.ParseToString(); };
        }

然后业务层的代码

        public TData<List<ProductInfo>> GetProductList(Func<string> getSignFunc)
        {
            TData<List<ProductInfo>> obj = new TData<List<ProductInfo>>();
            try
            {
                while (true)
                {
                    string sign = getSignFunc();
                }
            }
            catch (Exception ex)
            {
            }
            return obj;
        }

原文地址:https://www.cnblogs.com/lhking/p/12580395.html

时间: 2024-10-12 04:36:29

Winform业务层如何调用UI层的代码的相关文章

控制器层如何调用DAO层

其实很简单,只要一个添加 @Autowired 然后调用写法:修饰符  dao类名  变量名; 不在需要new @Autowired private UserDao userDao; 原文地址:https://www.cnblogs.com/hzyhx/p/11105044.html

表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)

转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式.DAO模式为了减少业务逻辑和数据访问逻辑之间的耦合,当一个持久曾框架被应用时,该模式将会减少业务对象和该框架之间的耦合,这样我们可以不修改业务对象而选择不同的持久层框架的实现.实际

UI层实现

领域驱动设计实践 -- UI层实现 目录 1. User Interface 2. Controller 3.  DTO 4.  infrastructure层的公共组件 5. UI层类图 6. 代码示例 正文 前面几篇blog主要介绍了DDD落地架构及业务建模战术,后续几篇blog会在此基础上,讲解具体的架构实现,通过完整代码demo的形式,更好地将DDD的落地方案呈现出来.本文是架构实现讲解的第一篇,主要介绍了DDD的User Interface层的实现,详细讲解了controller.dt

Winform应用程序实现通用遮罩层

Winform应用程序实现通用遮罩层 在WEB上,我们在需要进行大数据或复杂逻辑处理时,由于耗时较长,一般我们会在处理过程中的页面上显示一个半透明的遮罩层,上面放个图标或提示:正在处理中...等字样,这样用户体验就比较好了,然而如果在Winform客户端程序,通常遮罩层的处理就显得不那么简单或不那么好看,而我今天要说明的是,我实现的这个Winform通用遮罩层,却可以实现类似WEB上的遮罩层,既可以透明,而且还可以显示动态图片以及文字,那如何实现的呢,我现在一一讲解. 首先要明确我们要实现的效果

Winform应用程序实现通用遮罩层二

之前先后发表过:<Winform应用程序实现通用遮罩层>.<Winform应用程序实现通用消息窗口>,这两款遮罩层其实都是基于弹出窗口的,今天为大家分享一个比较简单但界面相对友好的另一种实现方案,废话不多说,直接进入主题. 一.实现思路(解决问题顺序): 透明遮罩: 1.实现可设置透明的Panel控件(MaskPanel): 2.Panel控件(MaskPanel)能够覆盖父容器(一般是当前窗体form对象)客户区区域(即:与父容器客户区区域大小相同),并处于最上层,保证父容器上的

20140117-配置文件为什么放在UI层

配置文件为什么放在UI层 (刚才写着代码突然忘了配置文件为什么要放在UI层了,只记得晓虎老师强调过.找了半天视频--) 现总结一下: 晓虎老师给出的理由,大体如下:比如一个web项目,分成三层,DAL,BLL,Model,UI,Common都写在不同的类库里,编译后,各类库会被编译为.dll文件,编译后的.dll文件会统一放在web项目(UI层)下的bin文件夹下,也就是说,配置文件如果不放在UI层,编译后程序会找不到配置文件. 项目分三层,DaL.BLL与UI层无关,比如,一个项目有两个端,F

UI层自动化测试介绍

UI指的是用户可以用肉眼可以看到的页面. UI层自动化测试的原理.不论是web端还是移动端,原理都是一样的,就是基于页面元素的识别和定位来进行模拟用户行为. 首先识别到某个元素,比如一个按钮,然后定义一个动作,比如点击,这样就通过代码模拟完成了一次按钮的点击,代替了人工去点击.如果后期再加入数据驱动和Page Object思想就基本形成了一个UI层自动化测试框架了 UI层自动化测试的适用范围:不建议做大规模的应用,主要几个原因: 1.UI变化频繁,计划根本赶不上变化 2.初期见效太慢 3.前端开

UI层分页

在客户端进行数据分页 主要通过客户端脚本进行实现 优点:提高网络传输量,提高宽带利用率 缺点:需加编写大量客户端脚本,增加开发与维护成本 1. UpdatePanel控件 优点: 使用ASP.NET AJAX中UpdatePanel控件,可以将应用层提供的分页功能转换到客户端 无需代码维护 充分利用服务器端控件功能 2.DataServices 使用DataServices提供的基于URI的数据访问,可以实现数据分页 在UI层可直接通过javascript进行解析 轻量级数据传输格式:XML/J

TimerTask的run()方法里面如何调用service层里面的方法

在java的spring框架中,用Timer和TimerTask来实现定时任务,有时我们要在TimerTask的子类的重写run方法里,调用service层的方法. 但是不管是spring.xml配置的bean还是注解@autoware注入的bean,在执行的时候都会报空指针异常. 这其中主要的问题是TimerTask不是由spring管理的,所以你TimerTask内部的service也无法自动注入,2种解决办法,1.TimerTask交由spring管理:2.通过applicationCon