从外部线程调用时,.net单元测试崩溃,"无法通过AppDomains传递GCHandle"

5 .net resharper nunit c++-cli appdomain

我正在编写一个C#单元测试来测试涉及线程的C++/CLI功能.

C++/CLI代码实现了DirectShow过滤器,即用于渲染电影的Windows API.这样我就可以创建DirectShow对象,我告诉它通过我的C++/CLI过滤器运行AVI,等待渲染完成,然后退出.我的过滤器有一个回调函数,可以将视频帧提供给C#进行处理.因此,DirectShow可以创建自己的线程并从该线程调用我的COM对象.

现在,这些东西在我正常运行我的代码时起作用,但是当从Resharper运行单元测试时,它失败并显示错误"无法通过AppDomains传递GCHandle".

出现问题的是Resharper在其testrunner中使用AppDomains,而DirectShow线程在某种程度上与此appdomain无关.

那么我如何从Resharper进行这项测试呢?是否有NUnit/Resharper设置来控制是否使用appdomains?我能以某种方式告诉CLR线程与特定的appdomain相关联吗?你知道其他任何务实的解决方法吗?

TIA Jan

小智 5

我设法让它使用http://www.lenholgate.com/archives/000856.html中描述的过程

这描述了如何在托管类中创建一个非托管函数指针.当您调用此函数指针时,您将进入最初创建对象的托管应用程序域.这修复了我的appdomain错误.