Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menjana HTML Dinamik dengan Cekap Menggunakan Pelayar Web .NET dan Async/Await?
Artikel ini meneroka cara menjana kod HTML secara dinamik menggunakan kelas WebBrowser System.Windows.Forms atau antara muka HTMLDocument bagi perhimpunan Microsoft HTML Object Library.
Pengguna pada mulanya cuba menggunakan kelas System.Windows.Forms.WebBrowser tetapi menghadapi had dalam mendapatkan kod HTML yang diberikan. Saya mempunyai masalah yang sama cuba mengakses kod melalui antara muka mshtml.HTMLDocument.
Pengguna menolak kaedah ini dan mencari alternatif, meneroka menggunakan sifat WebBrowser untuk mendapatkan data yang diperlukan, tetapi mengakui kelemahan pendekatan ini.
Penyelesaian yang dicadangkan menggabungkan kelas WebBrowser dan pengaturcaraan async/menunggu untuk meninjau secara cekap perubahan dalam petikan HTML semasa halaman sambil menyemak sifat WebBrowser.IsBusy. Pertimbangan utama termasuk:
Kod berikut menunjukkan kaedah LoadDynamicPage bagi penyelesaian terkapsul:
<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>
Untuk mendayakan pemaparan HTML5 dalam Internet Explorer 10 dan ke atas, gunakan kawalan ciri penyemak imbas yang ditunjukkan di bawah:
<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>
Atas ialah kandungan terperinci Bagaimana untuk Menjana HTML Dinamik dengan Cekap Menggunakan Pelayar Web .NET dan Async/Await?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!