Heim >Backend-Entwicklung >C++ >Wie generiert man effizient dynamisches HTML mit dem WebBrowser von .NET und Async/Await?
In diesem Artikel wird untersucht, wie Sie mithilfe der WebBrowser-Klasse von System.Windows.Forms oder der HTMLDocument-Schnittstelle der Microsoft HTML Object Library-Assembly dynamisch HTML-Code generieren.
Der Benutzer hat zunächst versucht, die Klasse System.Windows.Forms.WebBrowser zu verwenden, stieß jedoch beim Abrufen des gerenderten HTML-Codes auf Einschränkungen. Ich hatte das gleiche Problem beim Versuch, über die mshtml.HTMLDocument-Schnittstelle auf den Code zuzugreifen.
Benutzer schlossen diese Methoden aus und suchten nach Alternativen. Sie versuchten, die Eigenschaften des WebBrowsers zu nutzen, um die erforderlichen Daten zu erhalten, erkannten jedoch die Mängel dieses Ansatzes an.
Die vorgeschlagene Lösung kombiniert die WebBrowser-Klasse und die Async/Await-Programmierung, um Änderungen im aktuellen HTML-Snapshot der Seite effizient abzufragen und gleichzeitig die WebBrowser.IsBusy-Eigenschaft zu überprüfen. Zu den wichtigsten Überlegungen gehören:
Der folgende Code demonstriert die LoadDynamicPage-Methode der gekapselten Lösung:
<code class="language-csharp">async Task<string> LoadDynamicPage(string url, CancellationToken token) { // 导航和DocumentCompleted事件处理 var tcs = new TaskCompletionSource<bool>(); WebBrowserDocumentCompletedEventHandler handler = (s, arg) => tcs.TrySetResult(true); using (token.Register(() => tcs.TrySetCanceled(), useSynchronizationContext: true)) { this.webBrowser.DocumentCompleted += handler; try { this.webBrowser.Navigate(url); await tcs.Task; // 等待DocumentCompleted } finally { this.webBrowser.DocumentCompleted -= handler; } } // 获取根元素 var documentElement = this.webBrowser.Document.GetElementsByTagName("html")[0]; // 异步轮询当前HTML更改 var html = documentElement.OuterHtml; while (true) { // 异步等待 await Task.Delay(500, token); // 如果WebBrowser繁忙,则继续轮询 if (this.webBrowser.IsBusy) continue; var htmlNow = documentElement.OuterHtml; if (html == htmlNow) break; // 未检测到更改,结束轮询循环 html = htmlNow; } // 认为页面已完全渲染 token.ThrowIfCancellationRequested(); return html; }</code>
Um die HTML5-Wiedergabe in Internet Explorer 10 und höher zu aktivieren, verwenden Sie die unten gezeigten Browser-Funktionssteuerelemente:
<code class="language-csharp">private static void SetFeatureBrowserEmulation() { if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) return; var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, 10000, RegistryValueKind.DWord); }</code>
Das obige ist der detaillierte Inhalt vonWie generiert man effizient dynamisches HTML mit dem WebBrowser von .NET und Async/Await?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!