//Task分配循环 private void BK_DoWork(object sender, DoWorkEventArgs e) { while (TaskHelper.HasTask()) { CustomChrominWebBrowser browser = null; //尝试从对象池中获取一个可用对象 while (browser == null) { //任务队列还有任务 browser = BH.Get(); Thread.Sleep(2000); //LogHelper.Debug("继续 等待可用对象"); } { var _MainTask = TaskHelper.PopTask(); if (_MainTask == null) { return; } //LogHelper.Debug(string.Format("取得任务[{0}],及可用对象", _MainTask.Action)); //LogHelper.Debug(string.Format("池=>{1}/{0} ", BH.GetPoolSize(), BH.GetObjectSize())); browser.Info = _MainTask; //获取到可用对象则进行解析任务 browser.RequestHandler = new CustomRequestHandler(); if (browser.LifeSpanHandler == null) { browser.LifeSpanHandler = LifeSpanHandler; } browser.LoadHandler = new CustomLoadHandler(); ((CustomLoadHandler)browser.LoadHandler).OnStateChange += Browser_StateChanged; browser.FrameLoadStart -= Browser_FrameLoadStart; browser.FrameLoadStart += Browser_FrameLoadStart; var page = new ChrominViewModel(browser); //PreLoad = page; App.Current.Dispatcher.BeginInvoke(new Action(() => { browser.Address = browser.Info.Action; TaskList.Add(page); })); } } }