C# - Peek Queue随着时间的推移没有计时器。可能吗?

时间:2017-02-15 13:35:30

标签: c#

我当前的代码位于计时器内以继续比较if all drones actual position is near desired position,但我不认为这是最佳方法,因为我认为这会导致处理速度变慢。

有没有办法检查实际位置是否接近所需位置而不在计时器内查看?

 private void timer_missao_Tick(object sender, EventArgs e)
    {
        string[] pontos_separados = null;

        for (int k = 0; k < drone.Length; k++)
        {
            if (queue[k].Count > 0)
            {

                if (queue[k].Peek() == "levantar")
                {
                    drone[k]._droneClient.FlatTrim();
                    drone[k]._droneClient.Takeoff();
                    drone[k].subir_ate_altura = true;
                    queue[k].Dequeue();


                }


                else if (queue[k].Peek().Split(null)[0] == "goto")
                {
                    pontos_separados = queue[k].Peek().Split(null)[1].Split(',');
                     drone[k].posicao_desejada = new PointF(Convert.ToSingle(pontos_separados[0]), Convert.ToSingle(pontos_separados[1]));

                    int precisao = 5;

                    if (drone.All(d=> d.pos_atual().X > d.pos_desej().X - precisao && d.pos_atual().X <d.pos_desej().X + precisao &&
                        d.pos_atual().Y > d.pos_desej().Y - precisao && d.pos_atual().Y < d.pos_desej().Y + precisao))
                    {
                        for (int i = 0; i < drone.Length; i++)
                        {
                            queue[i].Dequeue();
                        }

                    }
                }
                else if (queue[k].Peek() == "aterrar")
                {

                    drone[k]._droneClient.Land();

                    if (drone[k]._droneClient.NavigationData.State == NavigationState.Landed)
                    {
                        queue[k].Dequeue();
                    }
                }

1 个答案:

答案 0 :(得分:0)

只有在无人机位置更新时才能进行检查,而不是每次打勾。这样你也可以跳过Peek,让更新无人机位置的代码将更新后的Drone对象传递给你的检查功能。