我找到了以下代码,并试图在 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() 的替代品。
有什么建议么?
谢谢,凯文