WatiN: CurrentThread должен иметь, это - набор ApartmentState к ApartmentState. STA, чтобы быть в состоянии автоматизировать Internet Explorer

Я называю WatiN от сервиса окон C#. Когда я вызываю WatiN, он выдает следующее исключение. CurrentThread должен иметь, это - набор ApartmentState к ApartmentState. STA, чтобы быть в состоянии автоматизировать Internet Explorer

Я попытался запустить поток и установить состояние квартиры через

mythread.SetApartmentState(ApartmentState.STA)

но это привело к другой ошибке

Неспособный оценить выражение, потому что код оптимизирован или собственный кадр сверх стека вызовов.

Я также пытался добавить атрибут к Сервисной точке входа.

static class Program
{
      [STAThread]
      static void Main()
      {
          ...

Какие-либо идеи?

25
задан Jonathan 23 December 2009 в 11:51
поделиться

1 ответ

Это не ошибка, это просто диагностика из отладчика. Она говорит вам, что не может дать отладочную информацию о том, что вы поместили в окно часов. Это обычное дело для кода, который компилируется в конфигурации Release, компилятор JIT оптимизирует машинный код и обычно помещает локальные переменные в регистры CPU. Делая их значение недоступным для отладчика, это не достаточно умно, чтобы понять, какой регистр использовался. Иногда это происходит и в отладочном релизе, когда на стеке вызовов находится неуправляемый код. Что не редкость для WebBrowser, есть очень большой кусок неуправляемого кода, который заставляет его работать.

FWIW, просто переключить состояние квартиры потока на STA недостаточно. Поток также должен прокачивать цикл сообщений Windows, чтобы однопоточная квартира работала корректно. Если вы этого не сделаете, то увидите, что операции с STA-объектами, такими как WebBrowser, будут заблокированы. Например, вы никогда не получите событие DocumentCompleted при переходе на сайт. Запуск цикла сообщений требует вызова Application.Run() или Form.ShowDialog() в WF-приложении.

.
8
ответ дан 28 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: