Я нашел следующий код и пытаюсь реализовать его в 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 ().
Есть предложения?
Спасибо,
Kevin