控制台和mvc中使用webbrowser

本文档介绍了如何在控制台和MVC应用中利用WebBrowser组件进行网页截屏。关键在于确保组件在STA线程中运行,通过设置[STAThread]属性解决控制台程序中的线程问题,并在MVC中通过新开线程并设置线程属性来实现。截屏完成后,将图像保存为PNG文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用webbrowser主要是为了截屏

但必须注意的是,用webbrowser必须在一个所谓的叫单一线程单元的线程中执行,一般你直接 new webbrowser会报错的

控制台程序,在main上加个[STAThread]

 class Program
    {
        static System.Windows.Forms.WebBrowser wb;
        [STAThread]
        static void Main(string[] args)
        {
            wb = new System.Windows.Forms.WebBrowser();
            wb.DocumentCompleted += wb_DocumentCompleted;
            wb.Navigate("http://10.5.10.143:9091/");
         
            Console.Out.Write(wb.DocumentText);
            while (wb.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
            {
                System.Windows.Forms.Application.DoEvents(); //避免假死,若去掉则可能无法触发 DocumentCompleted 事件。
            }
        }


        static void wb_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
        {
            //设置浏览器宽度、高度为文档宽度、高度,以便截取整个网页。
            wb.Width = wb.Document.Body.ScrollRectangle.Width;
            wb.Height = wb.Document.Body.ScrollRectangle.Height;
            using (Bitmap bmp = new Bitmap(wb.Width, wb.Height))
            {
                wb.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
                bmp.Save("C:\\Capture.png", ImageFormat.Png);
            }
        }
    }

mvc 开个新线程去new webbrowser给线程属性   t.SetApartmentState(ApartmentState.STA);

public void ss()
        {
            System.Threading.Thread t = new System.Threading.Thread(new ThreadStart(() => {
                wb = new System.Windows.Forms.WebBrowser();
                wb.DocumentCompleted += wb_DocumentCompleted;
                wb.Navigate("http://10.5.10.143:9091/");
                while (wb.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
                {
                    System.Windows.Forms.Application.DoEvents(); //避免假死,若去掉则可能无法触发 DocumentCompleted 事件。
                }
            })
            );
            t.SetApartmentState(ApartmentState.STA);
            t.Start();
        }
          void wb_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
         {
             //设置浏览器宽度、高度为文档宽度、高度,以便截取整个网页。
             wb.Width = wb.Document.Body.ScrollRectangle.Width;
             wb.Height = wb.Document.Body.ScrollRectangle.Height;
             using (Bitmap bmp = new Bitmap(wb.Width, wb.Height))
             {
                 wb.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
                 bmp.Save("C:\\Capture1.png", ImageFormat.Png);
             }
         }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值