void SetKey(bool key_on) { Task.Run(() => { bool worked = false; lock ( MotorLock ) { if (MotorCom.Open(MotorComPort)) { MotorCom.SetKey(key_on); MotorCom.Close(); worked = true; } else { Console.WriteLine("failed to SetKey"); } } if (worked) { Action <bool> update_action = (k) => { KeyLbl.Content = k ? "KEY ON" : "KEY OFF"; }; Dispatcher.BeginInvoke(update_action, key_on); } }); }