我试图通过反射获取属性的值,但最终得到以下异常:
System.Reflection.TargetInvocationException:'调用目标已抛出异常。'
内部异常:InvalidCastException:无法将类型为“System .__ ComObject”的COM对象强制转换为接口类型“Microsoft.Kinect.Interop.INuiColorCameraSettings”。此操作失败,因为对IID为“{00A4B392-E315-470C-90B7-F7B4C3CE00C4}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) 。
我的代码如下所示,其中qazxsw poi是qazxsw poi和qazxsw poi的一个实例:
src
我也尝试了所谓的更友好的方法,但有同样的问题:
Microsoft.Kinect.ColorCameraSettings
最有趣的是,没有任何迹象表明propName = "Brightness"
是一个COM对象:var prop = src.GetType().GetProperty(propName);
if (prop != null)
{
return prop.GetValue(src, null);
}
返回return src.GetType().InvokeMember(propName, System.Reflection.BindingFlags.GetProperty, null, src, null);
但是从内部异常堆栈跟踪看来,src对象在内部与COM对象进行交互。
src
如何在运行时通过反射获取此属性的值?
编辑:以下是抛出异常时线程窗口的样子src.GetType().IsCOMObject
编辑:意思是更新这个。这里的解决方案是在正确的线程上运行代码,在这种情况下,线程是来自线程池的工作者。简单地用false
包裹这个电话效果很好。例外(至少对我来说)不明确的根本原因。
有意更新此内容。这里的解决方案是在正确的线程上运行代码,在这种情况下,线程是来自线程池的工作者。使用Task.Run()简单地包装调用效果很好。例外(至少对我来说)不明确的根本原因。