2

我找到了以下代码,并试图在 COM 模块中实现它:

        public Bitmap GetThumbnail()
        {
            ThreadStart _threadstart = new ThreadStart(GenerateThumbnail);
            Thread _thread = new Thread(_threadstart);

            _thread.SetApartmentState(ApartmentState.STA);
            _thread.Start();
            _thread.Join();

            return _image;
        }

        private void GenerateThumbnail()
        {
            WebBrowser _browser = new WebBrowser();
            _browser.ScrollBarsEnabled = false;
            _browser.ScriptErrorsSuppressed = true;
            _browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(_browser_DocumentCompleted);
            _browser.Navigate(_url);
            while (_browser.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            _browser.Dispose();
        }

        void _browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            WebBrowser _browser = (WebBrowser)sender;
            _browser.ClientSize = new Size(this._pagewidth, this._pageheight);
            _browser.ScrollBarsEnabled = false;
            _image = new Bitmap(_browser.Bounds.Width, _browser.Bounds.Height);
            _browser.BringToFront();
            _browser.DrawToBitmap(_image, _browser.Bounds);

            if (_imageheight != 0 && _imagewidth != 0)
                _image = (Bitmap)_image.GetThumbnailImage(_imagewidth, _imageheight, null, IntPtr.Zero);
        }

但是,我发现 Application.DoEvents() 和 COM 不能一起工作。该代码在 C# 应用程序中运行良好,但在通过 COM 调用时会挂起。如您所知,我正在尝试获取网站缩略图,但我似乎无法找到 DoEvents() 的替代品。

有什么建议么?

谢谢,凯文

4

0 回答 0