private void sendCommands_Click(object sender, RoutedEventArgs e)
 {
     if (ourPort == null)
     {
         MessageBox.Show("Port is not open!");
     }
     else
     {
         Log("---------------- Sending data to copter! ------------------");
         Task.Run(() =>
         {
             try
             {
                 var toSendArray = ManeuverTrack.ToArray();
                 var ppmList     = new List <Tuple <ManeuverReference, Movement> >();
                 foreach (var item in toSendArray)
                 {
                     var man = Maneuvers.First(x => x.Uid == item.UidReference);
                     ppmList.AddRange(man.Movements.Select(x => new Tuple <ManeuverReference, Movement>(item, x)));
                 }
                 foreach (var item in ppmList)
                 {
                     if (cancelled)
                     {
                         break;
                     }
                     item.Item1.IsHighlighted = true;
                     tryRefresh();
                     ourPort.SendData(item.Item2.GetInSerialFormat());
                     Thread.Sleep(item.Item2.TimeMs);
                     item.Item1.IsHighlighted = false;
                     tryRefresh();
                 }
             }
             catch (Exception ex)
             {
                 Dispatcher.BeginInvoke((Action)(() =>
                 {
                     Log("EXCEPTION sending data to copter! Reason: " + ex.Message);
                     Log("Sending data to copter halted!");
                 }));
             }
             Dispatcher.BeginInvoke((Action)(() =>
             {
                 if (cancelled)
                 {
                     cancelled = false;
                     Log("XXXXXXXXXXXX --- Data sending cancelled --- XXXXXXXXXXX");
                 }
                 else
                 {
                     Log("-------XXX------ Data sent to copter! --------XXX------");
                 }
             }));
         });
     }
 }