C#COM互操作和应用程序.DoEvents()
我找到了以下代码,并尝试在COM模块中实现它:C#COM互操作和应用程序.DoEvents(),com,interop,doevents,Com,Interop,Doevents,我找到了以下代码,并尝试在COM模块中实现它: public Bitmap GetThumbnail() { ThreadStart _threadstart = new ThreadStart(GenerateThumbnail); Thread _thread = new Thread(_threadstart); _thread.SetApartmentState(ApartmentS
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()的替代品
有什么建议吗
谢谢,
凯文看,我怀疑这会有什么不同。“Via COM”太模糊了。嗨,汉斯,我通过经典ASP调用这个COM对象。我不想含糊其辞,但我不确定你需要什么样的信息来帮助你。我会查看另一篇文章,让你知道它是如何工作的。嗨,汉斯,对不起,但那篇文章没有帮助。问题是GenerateThumbnail()必须等待DocumentCompleted事件处理程序完成。但是线程不会等待事件自行完成。当我添加一个循环来测试线程状态时,应用程序只是锁定。Application.DoEvents()是唯一可以远程工作的东西,但它甚至可以锁定模块。是的,我不这么认为。经典ASP有一个奇怪的线程模型,我对此一无所知。你可能需要微软的支持才能弄清这一点。我怀疑这会有什么不同。“Via COM”太模糊了。嗨,汉斯,我通过经典ASP调用这个COM对象。我不想含糊其辞,但我不确定你需要什么样的信息来帮助你。我会查看另一篇文章,让你知道它是如何工作的。嗨,汉斯,对不起,但那篇文章没有帮助。问题是GenerateThumbnail()必须等待DocumentCompleted事件处理程序完成。但是线程不会等待事件自行完成。当我添加一个循环来测试线程状态时,应用程序只是锁定。Application.DoEvents()是唯一可以远程工作的东西,但它甚至可以锁定模块。是的,我不这么认为。经典ASP有一个奇怪的线程模型,我对此一无所知。您可能需要Microsoft支持才能弄清这一点。