C# 如何使C中的等待函数正确工作?

C# 如何使C中的等待函数正确工作?,c#,asynchronous,kinect,kinect-sdk,C#,Asynchronous,Kinect,Kinect Sdk,我有一个Kinect的程序,应该从50帧中提取骨架,计算平均值并绘制出来。 将异步事件处理程序添加到SkeletonFrameReady 您应该更具体地说明他们似乎没有完成工作,并且返回的值不正确。准确地陈述你观察到的情况,以及与你预期的情况有何不同。还有,返回点Task.Run=>vectors;?所要做的就是生成一个线程,该线程只返回存储在vectors局部变量中的list对象,此时该变量已经完全初始化。您是否愿意将整个方法体放在Run方法的lambda expression参数中,以便异步

我有一个Kinect的程序,应该从50帧中提取骨架,计算平均值并绘制出来。 将异步事件处理程序添加到SkeletonFrameReady


您应该更具体地说明他们似乎没有完成工作,并且返回的值不正确。准确地陈述你观察到的情况,以及与你预期的情况有何不同。还有,返回点Task.Run=>vectors;?所要做的就是生成一个线程,该线程只返回存储在vectors局部变量中的list对象,此时该变量已经完全初始化。您是否愿意将整个方法体放在Run方法的lambda expression参数中,以便异步完成工作?我在这个方法中看不到任何异步内容。它同步构建Vector3D列表,然后将其包装到任务中。如果要同步执行工作,为什么需要该任务?对于初学者来说,您的方法似乎需要类似以下静态异步任务getCoordinatesofJointsSkeleton的内容。同样,在foreach循环中,您还需要将await命令分配给某个对象。您能给我一个示例,说明如何将其应用到运行中吗方法的lambda表达式?lambda的表达不是我最强烈的side@helena.lissenko:为什么要使用async和Wait?
private async void InitSkeletonEvent(object sender,SkeletonFrameReadyEventArgs e)
    {
        List<Vector3D> vectors = new List<Vector3D>();
        double[,] coordinates = new double[50, 3];
        double[,] finalCoordinates = new double[50, 3];

        using (SkeletonFrame initSkeletonFrame = e.OpenSkeletonFrame())
        {
            if (initSkeletonFrame != null)
            {
                if (initSkeletons == null)
                {
                    initSkeletons = new Skeleton[initSkeletonFrame.SkeletonArrayLength];
                }
                initSkeletonFrame.CopySkeletonDataTo(initSkeletons);

                Skeleton initSkeleton = initSkeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();
                if (initSkeleton != null)
                {
                    foreach (Skeleton s in initSkeletons)
                    {
                        // Get all tracked Skeletons for the 50 frames
                        while (frame < maxFrames)
                        {
                            frame += 1;

                            vectors = await getCoordinatesofJoints(initSkeleton);

                            coordinates = await getCoordinatesPerJoint(vectors);
                        }
                    }
                    // Remove the event from SkeletonFrame
                    this.sensor.SkeletonFrameReady -= InitSkeletonEvent;

                    finalCoordinates = await getAverageCoordinateForJoint(coordinates);

                    skeleton = await getAvgSkeleton(finalCoordinates);
                }
            }
        }
    }
 private Task<List<Vector3D>> getCoordinatesofJoints(Skeleton s)
    {
        List<Vector3D> vectors = new List<Vector3D>();
        foreach (Joint j in s.Joints)
        {
            Vector3D tmp = new Vector3D(j.Position.X, j.Position.Y, j.Position.Z);
            vectors.Add(tmp);
        }
        return Task.Run(() => vectors);
    }