C# 访问从托管代码不断更新的WinRT组件的值

C# 访问从托管代码不断更新的WinRT组件的值,c#,wpf,windows-phone-8,com,windows-runtime,C#,Wpf,Windows Phone 8,Com,Windows Runtime,我正在编写一个应用程序,将在WindowsPhone8上对实时预览图像进行一些处理。为了获得良好的性能,我决定使用新sdk提供的本机接口。在本机端初始化相机,并将帧传送到xaml中的图像组件时,一切正常。现在,我将编写在OnFrameAvailable方法中运行的代码 我的问题是从本机组件获取已处理的值。为了使事情尽可能简单,我只是在OnFrameAvailable中设置了一个整数值,并通过WinRT组件编写了该值的访问器,以使其在托管端可访问 我陷入了一种优雅的方式来获取这个值。当我尝试在线程

我正在编写一个应用程序,将在WindowsPhone8上对实时预览图像进行一些处理。为了获得良好的性能,我决定使用新sdk提供的本机接口。在本机端初始化相机,并将帧传送到xaml中的图像组件时,一切正常。现在,我将编写在OnFrameAvailable方法中运行的代码

我的问题是从本机组件获取已处理的值。为了使事情尽可能简单,我只是在OnFrameAvailable中设置了一个整数值,并通过WinRT组件编写了该值的访问器,以使其在托管端可访问

我陷入了一种优雅的方式来获取这个值。当我尝试在线程中的循环中访问它时,会出现臭名昭著的“尝试读取或写入受保护内存”异常。我知道代码没有多大意义,但我尽量减少,以指出问题。 我是这样做的:

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        nativeCapture = new NativeCapture();
        while (nativeCapture.Done == false) ;
        viewFinderBrush.SetSource(nativeCapture.NPhotoCaptureDevice);
        DrawElementThread = new Thread(drawElementsFunction);
        DrawElementThread.Start();
        base.OnNavigatedTo(e);
    }
    void drawElementsFunction()
    {
        while(true)
        {
            int a = nativeCapture.DetectedRectangleCoordinates; // Exception occurs here
        }

    }
在这里,您还会注意到我正在访问另一个值,Done,但是我没有得到它的异常。但是,我应该注意的是,它只是在本机组件的构造函数中设置的,而DetectedRectangleCoordinates则是在FrameAvailable上每次调用时设置的,我希望相机的预览帧随时可用

因此,我怀疑WinRT组件上可能存在某种锁定机制。每次OnFrameAvailable方法DetectedRectangleCoordinates变得不可访问时。然而,我找不到关于这一点的陈述,也不知道如何调试这样的东西

如果您能为我提供一些与此或类似问题相关的建议,我将不胜感激?它是否与WinRT组件中的访问机制有关?或者这是我正在做的一个糟糕的线程练习?如果是这样,我将如何同步托管代码和本机代码中的线程

编辑: 在给出异常的行上放置断点并单步执行不会导致异常,我得到了预期的值

编辑:
我在本机端的get函数上设置了一个断点。该指针在那里指向null。我不明白为什么,因为它是从刚刚构造的对象调用的。(nativeCapture对象)

我花了很长时间研究可能出现的问题,但将代码添加到页面的已加载事件处理程序中解决了这个问题。我不确定它与什么有关,但当我在问题中给出的代码段在OnNavigatedTo方法中运行时,nativeCapture组件的方法上可能有自空指针(this->)。 我希望这可以帮助人们,如果他们有类似的问题