我正在使用Winform开发基于VS2012的Kinect应用程序。在尝试了几种方法之后,我仍然无法将值从一个类传递到另一个类。

基本上我有三个类,一个公共MainWindow(),公共部分FaceTrackingViewer()和公共SkeletonFaceTracker()。最后一个类位于FaceTrackingViewer()类中。

在SkeletonFaceTracker()中,我具有以下内容:

public bool lastFaceTrackSucceeded { get; set; }

internal void OnFrameReady(KinectSensor kinectSensor, ColorImageFormat colorImageFormat, byte[] colorImage, DepthImageFormat depthImageFormat, short[] depthImage, Skeleton skeletonOfInterest)
{
    // something else
    if (this.faceTracker != null)
    {
        this.lastFaceTrackSucceeded = frame.TrackSuccessful; //where it's set to be true.
        //something else
    }
}


我还尝试将第一行更改为:

public bool lastFaceTrackSucceeded;

public bool LastFaceTrackSucceeded
{
    get { return lastFaceTrackSucceeded; }
    private set { lastFaceTrackSucceeded = value; }
}


我认为两者是一样的。

在MainWindow()中,我有:

public partial class MainWindow : Window
{
    //some other irrelevant code snippets

    private FaceTrackingViewer.SkeletonFaceTracker skeletonFaceTracker = new FaceTrackingViewer.SkeletonFaceTracker();

    private void button_faceOnly_Click(object sender, RoutedEventArgs e)
    {
        bool faceTrackSucceeded = skeletonFaceTracker.lastFaceTrackSucceeded;
        // if I use the second structure in SkeletonFaceTracker(), it should be:
        // bool faceTrackSucceeded = skeletonFaceTracker.LastFaceTrackSucceeded;

        if (faceTrackSucceeded == true )
        {
             //do something
        }
    }
}


但是,即使bool faceTrackSucceeded中的falselastFaceTrackSucceededLastFaceTrackSucceededSkeletonFaceTracker()始终是true。我很困惑,不知道哪里出了问题。

请注意,所有视频处理和面部跟踪操作均在FaceTrackingViewer()类中进行。我只是想将一些参数和结构传递给MainWindow()

谢谢

最佳答案

首先,我假设您纯粹出于测试目的将变量lastFaceTrackSucceeded设为公共。在示例中,定义属性的两种方式在功能上是相同的。

我唯一想到的另一件事是,您正在LastFaceTrackSucceeded的另一个实例上将SkeletonFaceTracker设置为true。您尚未提供足够的代码来确保这一点,但是如果您有两个(或更多)实例,则很容易将它们混淆。

10-04 22:28