C#COM互操作和应用程序.DoEvents()

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

我找到了以下代码,并尝试在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()的替代品

有什么建议吗

谢谢,
凯文

看,我怀疑这会有什么不同。“Via COM”太模糊了。嗨,汉斯,我通过经典ASP调用这个COM对象。我不想含糊其辞,但我不确定你需要什么样的信息来帮助你。我会查看另一篇文章,让你知道它是如何工作的。嗨,汉斯,对不起,但那篇文章没有帮助。问题是GenerateThumbnail()必须等待DocumentCompleted事件处理程序完成。但是线程不会等待事件自行完成。当我添加一个循环来测试线程状态时,应用程序只是锁定。Application.DoEvents()是唯一可以远程工作的东西,但它甚至可以锁定模块。是的,我不这么认为。经典ASP有一个奇怪的线程模型,我对此一无所知。你可能需要微软的支持才能弄清这一点。我怀疑这会有什么不同。“Via COM”太模糊了。嗨,汉斯,我通过经典ASP调用这个COM对象。我不想含糊其辞,但我不确定你需要什么样的信息来帮助你。我会查看另一篇文章,让你知道它是如何工作的。嗨,汉斯,对不起,但那篇文章没有帮助。问题是GenerateThumbnail()必须等待DocumentCompleted事件处理程序完成。但是线程不会等待事件自行完成。当我添加一个循环来测试线程状态时,应用程序只是锁定。Application.DoEvents()是唯一可以远程工作的东西,但它甚至可以锁定模块。是的,我不这么认为。经典ASP有一个奇怪的线程模型,我对此一无所知。您可能需要Microsoft支持才能弄清这一点。