Катастрофические отказы модульного теста .NET с “Не могут передать GCHandle через AppDomains” при вызове от внешнего потока

Я пишу модульный тест C# для тестирования C++ / функциональность CLI, которая включает потоки.

C++ / код CLI реализует фильтр DirectShow, Windows API для рендеринга фильмов. Это работает таким образом, что я создаю объекты DirectShow, я говорю этому выполнять AVI через свой C++ / фильтры CLI, ожидает, пока рендеринг не сделан и затем выходит. Мой фильтр имеет обратный вызов, который дает видеокадры C# для обработки. Работы DirectShow таким образом, что это создает свой собственный поток и называет мои COM-объекты от этого потока.

Теперь, этот материал работает, когда я обычно выполняю свой код, но при выполнении модульного теста от Resharper он перестал работать с ошибкой, "Не может передать GCHandle через AppDomains".

То, что, кажется, идет не так, как надо, - то, что Resharper использует AppDomains в своем testrunner, и поток DirectShow так или иначе не связан с этим appdomain.

Таким образом, как я заставляю этот тест работать от Resharper? Существует ли установка NUnit/Resharper, чтобы управлять, если appdomains используются? Я могу сказать CLR так или иначе, что поток является assocated с конкретным appdomain? Вы знаете какие-либо другие прагматические обходные решения?

TIA Jan

5
задан 15 February 2010 в 15:51
поделиться

2 ответа

Мне удалось заставить его работать с помощью процедуры, описанной в http://www.lenholgate.com/archives/000856.html

Здесь описывается, как создать указатель неуправляемой функции на метод в управляемом классе. Когда вы вызываете этот указатель на функцию, вы попадаете в управляемый домен приложения, в котором изначально был создан объект. Это исправляет ошибки моего домена приложения.

5
ответ дан 14 December 2019 в 13:34
поделиться

Вы не упомянули версию ReSharper, которую используете. Попробуйте запустить тесты с последней версией ReSharper 5.0 Nightly Build . Там ребята переписали тестовый раннер, чтобы наивно поддержать Nunit. Если это не сработает, я предлагаю вам сообщить об этом как о проблеме в их новой системе отслеживания ошибок .

1
ответ дан 14 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

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