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; }
相关推荐
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22