protected override void OnFillerStateChanged(FillBase fill) { if (fill.FillState == FillState.Running) { if (_detector == null) { _detector = new PrivateDetector(fill.Browser, FileHelper.GetFillRuleFile(this.Version, this.FillType, this.Standard, this.CarType), attrList); } else { _detector.Browser = fill.Browser; } string uri = fill.CurrentUrl.AbsolutePath; if (_detected.ContainsKey(uri) == false) { fill.Reset(); _detected.Add(uri, ""); UrlParameter parameter = base.Uris[uri] as UrlParameter; _detector.Detect(parameter.LabelName); fill.Resume(); } } else if (fill.FillState == FillState.Exception) { WebFillManager.ShowMessageBox(fill.Exception.Message, "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } else if (fill.CurrentUrl.OriginalString == base.EndPageUri) { OnFinished(EventArgs.Empty); } }
/// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { if (webBrowser1 != null) { webBrowser1.Navigated -= WebBrowser_Navigated; webBrowser1.NewWindow3 -= WebBrowser_NewWindow3; webBrowser1.DocumentCompleted -= WebBrowser_DocumentCompleted; if (isModalDialog) { this.DialogResult = WebBrowser2.InvokeScript(webBrowser1.Document.DomDocument as IHTMLDocument, "getDialogResult"); } } if (disposing) { if (webBrowser1 != null) { webBrowser1.Dispose(); if (_fillManager != null) { _fillManager.DetachWebBrowser(webBrowser1); } } if (components != null) { components.Dispose(); } } base.Dispose(disposing); _fillManager = null; webBrowser1 = null; }
public void Compare() { if (_thread != null && _thread.IsAlive) { _thread.Abort(); } string type = _root.Header; string dir = string.Format("{0}\\Temp", version); string dataFile = string.Format("{0}\\{1}\\{2}", version, type, FileHelper.GetTextValue("DefaultDetectDataFile")); if (Directory.Exists(dir) == false) { Directory.CreateDirectory(dir); } if (type == "国环") { fillManager = new GHComparerFillManager(_webBrowser, dataFile); } else if (type == "北环") { fillManager = new BHComparerFillManager(_webBrowser, dataFile); } if (fillManager != null) { fillManager.Finished += fillManager_Finished; _thread = new System.Threading.Thread(CompareWorker); _thread.Start(dir); } else { throw new ArgumentException("未定义的元素感知页面!"); } }
private void SetText(IntPtr handle) { WebFillManager fillManager = _fillManager as WebFillManager; if (fillManager != null) { GetTextHandle(handle); if (textHandle != IntPtr.Zero) { WebBrowserUtils.HtmlUtils.Fillers.ApiSetter.SetText(textHandle, fillManager.CurrentValue); } if (btnHandle != IntPtr.Zero) { WebBrowserUtils.HtmlUtils.Fillers.ApiSetter.ClickButton(btnHandle, this.Handle, null, null); } } }
/// <summary> /// 拦截弹出窗口。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void WebBrowser_NewWindow3(object sender, WebBrowserNavigatingEventArgs e) { e.Cancel = true; WebBrowser browser = sender as WebBrowser; HtmlElement element = browser.Document.ActiveElement; while (element != null) { if (element.TagName == "FRAME" || element.TagName == "IFRAME") { if (string.IsNullOrEmpty(element.Id)) { foreach (HtmlWindow wnd in element.Document.Window.Frames) { if (wnd.WindowFrameElement == element) { element = wnd.Document.ActiveElement; break; } } } else { element = element.Document.Window.Frames[element.Id].Document.ActiveElement; } } else { break; } } HtmlDocument opener = element == null ? null : element.Document; TabPageWithWebBrowser page = new TabPageWithWebBrowser(opener.Window.DomWindow as IHTMLWindow2); WebFillManager webFillManager = _fillManager as WebFillManager; if (webFillManager != null) { webFillManager.AttachWebBrowser(page.WebBrowser1); } page.FillManager = webFillManager; XtraTabControl tabControl = this.Parent as XtraTabControl; tabControl.TabPages.Add(page); tabControl.SelectedTabPage = page; //显示该页 }
public void StopCompare() { if (this.fillManager != null) { try { fillManager.EndFill(); fillManager.Finished -= fillManager_Finished; if (_thread != null) { _thread.Abort(); } } catch (System.Threading.ThreadAbortException) { } finally { _thread = null; fillManager = null; } } }
private void CompareWorker(object state) { try { TreeModel result = new TreeModel(); string type = _root.Header; RuleCompareNode root = new RuleCompareNode() { Header = _root.Header, IsExpanded = true }; result.AddChild(root); RuleCompareNode resultItem; string path = state as string; if (type == "国环") { _asyncHandler = new FillAsyncHandler(); List <KeyValuePair <string, string> > appendixes = FileHelper.GetAppendixes(type); foreach (RuleCompareNode item in _root.Children) { if (item.IsChecked == false) { continue; } // 排放标准 resultItem = new RuleCompareNode() { Header = item.Header }; root.AddChild(resultItem); foreach (var appendix in appendixes) { RuleCompareNode appendixNode = new RuleCompareNode() { Header = appendix.Key }; resultItem.AddChild(appendixNode); CompareInner(item, appendixNode, path, type, appendix); } } } else if (type == "北环") { _asyncHandler = new FillAsyncHandler(); foreach (RuleCompareNode item in _root.Children) { if (item.IsChecked == false) { continue; } // 排放标准 resultItem = new RuleCompareNode() { Header = item.Header }; root.AddChild(resultItem); CompareInner(item, resultItem, path, type, null); } } this.Result = result; this.fillManager.EndFill(); OnFinished(EventArgs.Empty); this.fillManager = null; } catch (Exception ex) { WebFillManager.ShowMessageBox(ex.Message, "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } finally { if (this.fillManager != null) { this.fillManager.EndFill(); this.fillManager = null; } } }