zoukankan      html  css  js  c++  java
  • Winform业务层如何调用UI层的代码

    一、背景介绍

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

    二、普通写法

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

    三、通过Func重构

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

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

    执行这个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;
            }
  • 相关阅读:
    Eclipse关于怎么调出web project
    RMI(远程方法调用)入门
    XSS攻击
    微信小程序
    java——IO流01
    06 python下
    06python上
    05python下
    05python上
    Nginx & Apache_网站用户认证
  • 原文地址:https://www.cnblogs.com/lhking/p/12580395.html
Copyright © 2011-2022 走看看