当前位置: 首页 > news >正文

html链接网站模板深圳国内网站建设

html链接网站模板,深圳国内网站建设,手机版自适应网站怎么做,建筑行业网站模版背景前些天遇到一个需求#xff0c;在没有第三方源码的情况下#xff0c;刷新一个第三方UI#xff0c;并且拦截到其ajax请求的返回结果。当结果为AVALIABLE的时候#xff0c;停止刷新并语音提示#xff0c;否则继续刷新。分析这个需求#xff0c;发现需要控制一个刷新循环… 背景前些天遇到一个需求在没有第三方源码的情况下刷新一个第三方UI并且拦截到其ajax请求的返回结果。当结果为AVALIABLE的时候停止刷新并语音提示否则继续刷新。分析这个需求发现需要控制一个刷新循环的暂停与开始因此网上搜到了通过ManualResetEvent实现线程的暂停与恢复。ManualResetEvent介绍ManualResetEvent是一个通过信号机制实现线程间状态同步的类。常用的方法有以下三个WaitOne阻止当前线程直到收到信号Reset将事件状态设置为非终止状态导致线程阻止Set将事件状态设置为终止状态从而允许继续执行一个或多个等待线程实现设计1.通过CefSharp的谷歌浏览器插件请求第三方网站 2.具体交互逻辑如下默认开启一个线程并通过WaitOne挂起等待手动开始自动刷新的指令手动通过Set方法发送开始工作信号执行完面操作后通过Reset将线程再次挂起并等待Ajax结果判断Ajax结果如果不等于AVALIABLE则再次恢复线程public Form1() {InitializeComponent();var setting new CefSettings();setting.Locale zh-CN;setting.UserAgent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36;// 避免页面加载不出来, 建议加上这句Cef.Initialize(setting);workerThread new Thread(new ThreadStart(BeginListenWorkerAsync));workerThread.IsBackground true;workerThread.Start();this.停止自动监听ToolStripMenuItem.Enabled false; }private async void BeginListenWorkerAsync() {while (true){_eventBeginListenWorkList.WaitOne(); //1.默认挂起线程等待信号chromiumWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(document.evaluate(//*[idroot]/div[1]/div[2]/div/div[2]/div[1]/div[1]/div/div[1]/button, document).iterateNext().click());Thread.Sleep(1000);chromiumWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(document.evaluate(//*[idroot]/div[1]/div[2]/div/div[1]/div/div/div/div[2]/div[6]/div/button, document).iterateNext().click());_eventBeginListenWorkList.Reset(); //3.页面执行完相应操作则再次挂起线程等待ajax请求结果再判断是否恢复线程} }private void 停止自动监听ToolStripMenuItem_Click(object sender, EventArgs e) {this.开始自动监听ToolStripMenuItem.Enabled true;this.停止自动监听ToolStripMenuItem.Enabled false;_eventBeginListenWorkList.Reset();StartListen false; }private void 开始自动监听ToolStripMenuItem_Click(object sender, EventArgs e) {this.开始自动监听ToolStripMenuItem.Enabled false;this.停止自动监听ToolStripMenuItem.Enabled true;_eventBeginListenWorkList.Set(); // 2.手动通过Set发送信号恢复线程让其工作StartListen true; } 3.现在我们需要定义RequestHandler来指定ResourceHandler拦截ajax请求private void Form1_Load(object sender, EventArgs e) {chromiumWebBrowser1.RequestHandler new MyRequestHandler(this);chromiumWebBrowser1.Load(https://www.xxxxxxxx.com/); }MyRequestHandler中需要指定自定义ResourceHandlerpublic class MyRequestHandler : RequestHandler {Form1 _form;public MyRequestHandler(Form1 form){_form form;}public static string AuthorizationValue;protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture,bool isRedirect){// 先调用基类的实现断点调试return base.OnBeforeBrowse(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect);}protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame,IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling){Console.WriteLine(request.Url);if (request.Url.StartsWith(https://www.xxxxxxxxxxxxxxxx/api) request.Headers.AllKeys.Contains(Authorization)){AuthorizationValue request.Headers[Authorization];}return new MyResourceRequestHandler(_form);} }4.最后ResourceRequestHandler拦截到ajax请求之后如果结果不是AVALIABLE则通过StartListenFunc再次恢复线程public class MyResourceRequestHandler : ResourceRequestHandler {Form1 _form;public MyResourceRequestHandler(Form1 form){_form form;}private Dictionaryulong, MemoryStreamResponseFilter responseDictionary new Dictionaryulong, MemoryStreamResponseFilter();protected override IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response){var dataFilter new MemoryStreamResponseFilter();responseDictionary.Add(request.Identifier, dataFilter);return dataFilter;}protected override void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength){MemoryStreamResponseFilter filter;if (responseDictionary.TryGetValue(request.Identifier, out filter)){var data filter.Data;if (request.Url.StartsWith(https://xxxxxxxxxxxxxxxxxxxx/oneapi)){var available false;string s System.Text.Encoding.UTF8.GetString(data, 0, data.Length);Console.WriteLine(s);if (!string.IsNullOrEmpty(s)){var responseData JsonConvert.DeserializeObjectScheduleResponse(s);if (responseData ! null responseData.productPreviews ! null){foreach (var item in responseData.productPreviews){if (item.schedule ! null item.schedule.status ! null item.schedule.status.name AVAILABLE){available true;Mp3Player.Play();Action act delegate () { _form.StopListen(); };_form.Invoke(act);break;}}}}if (!available Form1.StartListen){Form1.StartListenFunc();}}filter.Dispose();}} } 而StartListenFunc则是通过Set方法再次恢复了线程对ui的重复查询public static void StartListenFunc() {_eventBeginListenWorkList.Set();StartListen true; }ManualResetEvent官方介绍如下https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.manualresetevent?viewnetframework-1.1
http://wiki.neutronadmin.com/news/389726/

相关文章:

  • 怎么做火短视频网站wordpress 禁止加载js
  • 咖啡网站建设的需求分析自己怎么制作公众号
  • 德州专业网站开发公司特效网站模板
  • 大型茶叶网站建设网站建设销售提点20个点
  • 从零开始建网站百度平台官网
  • 宁波市住房和城乡建设培训中心网站网站免费建站2
  • 企业做网站设计的怎么生成网页链接
  • 网站建设后如何检测wordpress 一键迁移
  • 网站开发都需要什么工具曼联vs维拉直播免费视频直播
  • 网站建设公司潍坊做企业网站后期还需要费用吗
  • wordpress 不支持svgseo搜索引擎优化薪酬
  • 教人做美食的网站做网站啦代理的方法
  • 武义县网站制作网站换主机
  • 网站开发策划方案歌词插件wordpress
  • 如何做发表文章的网站网站管理助手打开是系统参数配置
  • 苏州实力做网站公司html视频教学
  • 公司建网站 内部邮箱省住房城乡建设厅
  • 百度移动端模拟点击排名广州网站优化网站
  • 网站优化预算品牌建设需打持久战
  • 门户型网站都有哪些英文网站标题字体
  • app小程序网站开发新网站的宣传推广
  • 佛山市住房建设局网站网站建设的售后服务
  • 学校作业怎么做网站广州网站建设 易企建站
  • dw做的网站放文件夹2024年度关键词
  • 网站开发程序员招聘应届生简历模板
  • 汕头市住房和城乡建设局网站如何设计网站的链接
  • 建设外贸购物网站自己做头像的软件
  • 南京市住房与城乡建设局网站赣州网站建设怎样
  • 开发区经济建设网站我做网站了
  • 做外销网站手机论坛网站