admin 发表于 2026-5-27 15:38:21

5.0版本设置独立缓存如果要用同步创建浏览器的正确姿势


方法一:
      public class CreatBrowserTask : FBroSharpTask
      {

            public FBroSharpRequestContext request_context = null;

            public override void Execute()
            {
                FBroSharpWindowsInfo windows_info = new FBroSharpWindowsInfo
                {
                  parent_window = IntPtr.Zero,
                  x = 0,
                  y = 0,
                  width = 1024,
                  height = 800,
                  window_name = "独立缓存"
                };

                //创建浏览器事件回调类
                BrowserEvent browser_event = new BrowserEvent();

                var browser = FBroSharpControl.CreateSync("https://www.baidu.com", windows_info, default, request_context, default/*extra_info*/, browser_event, default/*event_contrl*/);
                Console.WriteLine(browser.IsValid);
            }
      }

      private void toolStripMenuItem1_Click(object sender, EventArgs e)
      {

            CreatBrowserTask callback = new CreatBrowserTask();

            //设置运行环境
            FBroSharpRequestContextSet contextSet = new FBroSharpRequestContextSet
            {
                cache_folder = "syncothercache"
            };

            callback.request_context = (FBroSharpRequestContext)FBroSharpRequestContext.CreateContext(contextSet);

            FBroSharpTaskRunner.CefPostDelayedTask(FBroSharpThreadID.TID_UI, callback, 500);

      }

方法二:
      public class CreatBrowserTask : FBroSharpTask
      {

            public FBroSharpRequestContext request_context = null;

            public override void Execute()
            {
                FBroSharpWindowsInfo windows_info = new FBroSharpWindowsInfo
                {
                  parent_window = IntPtr.Zero,
                  x = 0,
                  y = 0,
                  width = 1024,
                  height = 800,
                  window_name = "独立缓存"
                };

                //创建浏览器事件回调类
                BrowserEvent browser_event = new BrowserEvent();

                var browser = FBroSharpControl.CreateSync("https://www.baidu.com", windows_info, default, request_context, default/*extra_info*/, browser_event, default/*event_contrl*/);
                if (browser == null)
                {
                  //创建失败重新创建
                  FBroSharpTaskRunner.CefPostTask(FBroSharpThreadID.TID_UI, this);
                  return;
                }
                Console.WriteLine(browser.IsValid);
            }
      }

      private void toolStripMenuItem1_Click(object sender, EventArgs e)
      {

            CreatBrowserTask callback = new CreatBrowserTask();

            //设置运行环境
            FBroSharpRequestContextSet contextSet = new FBroSharpRequestContextSet
            {
                cache_folder = "syncothercache"
            };

            callback.request_context = (FBroSharpRequestContext)FBroSharpRequestContext.CreateContext(contextSet);

            FBroSharpTaskRunner.CefPostTask(FBroSharpThreadID.TID_UI, callback);

      }

PS:
1.方法一源码里面采用了延迟500毫秒执行创建浏览器的任务,是因为创建独立缓存目录的环境你必须提前创建,就是这个FBroSharpRequestContext.CreateContext,而5.0后内部这里已经改成异步了,你设置的时候他并没有创建成功,必须要异步等待,直接传递给浏览器,浏览器发现还没创建成功就会创建失败,返回浏览器就会是空,所以这就必须要异步等待才行;
2.其实还有个办法,就是提前创建好环境,比如初始化后,再使用同步创建浏览器直接调用已经创建好的环境也不会出问题;或者要不使用方法二,如果创建失败在重新创建一次,一般第二次环境基本创建好了,也会成功,而且基本无感
3.主要要使用同步创建浏览器才会有这个问题,使用异步创建就不会有这个问题,所以还是建议使用异步,而且异步也是最快的!
4.同理,易和火山也是如此!


mosheng 发表于 2026-5-27 15:59:08

{:6_479:}{:6_479:}{:6_479:}{:6_479:}{:6_479:} 到最后,我更倾向于使用异步,稳定简单
页: [1]
查看完整版本: 5.0版本设置独立缓存如果要用同步创建浏览器的正确姿势