首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 網頁截圖實戰(二):異步調用與狀態回傳

     編輯:關於C語言

承接上篇,本文展示如何在 ASP.NET 中以異步線程調用截圖類,並通過標誌位回傳截圖狀態,避免阻塞主線程。

調用入口

protected bool SaveOriginalPageToImage(Guid myGuid)
{
    guid = myGuid;
    if (this.CurrentPageAct == PageAct.Edit)
    {
        string pagePath = Request.Url.LocalPath.Replace("Operation", "Capture");
        UrlPath = pagePath + "?act=view&ProjectNo=" + _projectNo;
        Thread newTh = new Thread(CaptureImage);
        newTh.SetApartmentState(ApartmentState.STA); // WebBrowser 需 STA
        newTh.Start();
        while (newTh.ThreadState == ThreadState.Running) { /* 等待 */ }
        return CaptureState;
    }
    return false;
}

截圖執行邏輯

public void CaptureImage()
{
    try
    {
        string url = "https://" + Request.Url.Host + ":" + Request.Url.Port + UrlPath;
        GetImage thumb = new GetImage(url, 1024, 1200, 1024, 1200);
        Bitmap x = thumb.GetBitmap();
        string fileName = DateTime.Now.ToString("yyyyMMddhhmmss");
        x.Save(Server.MapPath("~/Capture/SavePage") + "\\" + guid + ".jpg");
        CaptureState = true;
    }
    catch (Exception ex)
    {
        CaptureState = false;
    }
}

關鍵點提示

  • 必須將線程設置為 ApartmentState.STA,否則 WebBrowser 控件會拋出異常。
  • 使用 Guid 命名文件,避免併發衝突。
  • 生產環境建議改用 Task.Run + async/await 替代阻塞等待,提升併發性能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved