C # COM-взаимодействие и применение. DoEvents () - PullRequest
2 голосов
/ 28 сентября 2011

Я нашел следующий код и пытаюсь реализовать его в 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

...