WinForms / WPF 桌面應用中需生成網頁縮略圖或全頁截圖。注意:ASP.NET 服務端不支持 WebBrowser 控件(無 UI 消息泵、權限受限),請勿用於 Web 項目。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private WebBrowser _webBrowser;
public Form1()
{
InitializeComponent();
}
public void GetThumbNail(string url)
{
_webBrowser = new WebBrowser();
_webBrowser.ScrollBarsEnabled = false;
_webBrowser.Navigate(url);
_webBrowser.DocumentCompleted += Completed;
// 等待加載完成(同步等待,UI 線程需 DoEvents 防假死)
while (_webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
private void Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// 設置控件大小為文檔實際大小,截取完整頁面
_webBrowser.Width = _webBrowser.Document.Body.ScrollRectangle.Width;
_webBrowser.Height = _webBrowser.Document.Body.ScrollRectangle.Height;
using (Bitmap bmp = new Bitmap(_webBrowser.Width, _webBrowser.Height))
{
_webBrowser.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save("Capture.png", System.Drawing.Imaging.ImageFormat.Png);
pictureBox1.ImageLocation = "Capture.png"; // 界面顯示
}
}
private void button1_Click(object sender, EventArgs e)
{
GetThumbNail(textBox1.Text);
}
}
}
Application.DoEvents() 保持消息泵運行,確保 DocumentCompleted 觸發。DrawToBitmap 將控件繪製到位圖,支持超出可視區域的完整頁面。TaskCompletionSource 封裝為 async/await 模式,避免阻塞 UI 線程。ASP.NET Core / .NET 6+ 服務端截圖推薦使用 Puppeteer Sharp(無頭 Chrome)或 Playwright,支持現代 CSS/JS、無 UI 依賴、可容器化部署。