Ярлык не изменит цвет до тех пор, пока код не будет выполнен

Это много нерелевантного кода для просмотра ... но в значительной степени он отправляет пакет и прослушивает пакет в ответ

если я закомментирую часть, где он вызывает метод ReceiveAuthPacket () в конце отправки пакета, он будет работать, и метка станет синей ... но в противном случае она никогда не активируется, превращая метку в синий и вместо этого метку становится красной или зеленый (в зависимости от возвращенного пакета).

в основном я просто использую метку в качестве индикатора статуса ... и что бы я ни пытался, я не могу заставить его светиться синим цветом, потому что кажется, что он ждет завершения выполнения всего кода, и он просто не будет работать ..

я даже пытался использовать триггеры данных в WPF, и он все равно не будет работать.

какие-нибудь обходные пути? я просто не понимаю ..

        private readonly UdpMessageAuthentication _msgAuth;        

        private void Button_Authenticate_OnClick(object sender, RoutedEventArgs e)
        {
            Label_Authentication.Content = "Attempting Authentication";
            Label_Authentication.Foreground = new SolidColorBrush(Colors.Blue);

            _msgAuth.SendAuthPacket(IPAddress.Parse(TextBox_IP.Text), TextBox_ClientID.Text);
        }

        public void SendAuthPacket(IPAddress ip, string userID)
        {
            _ip = ip;
            _userID = userID;
            if (_udpClient.Client == null)
                _udpClient = new UdpClient();

            //GSISClockRegRequest,<Client Id>,,1 
            string msg = string.Format("GSISClockRegRequest,{0},,1", _userID);
            byte[] sendBytes = Encoding.ASCII.GetBytes(msg);
            bool sent = false;

            try
            {
                _label.Content = "Attempting Authentication";
                _label.Foreground = new SolidColorBrush(Colors.Blue);

                while (_label.Content != "Attempting Authentication")
                {
                    //loop
                }

                _udpClient.Connect(_ip, 5001);
                _udpClient.Send(sendBytes, sendBytes.Length);
                Console.WriteLine("Sending {0} bytes.  Message: {1}", sendBytes.Length, msg);
                sent = true;
            }
            catch (Exception)
            {
                Console.WriteLine("UDP Auth Packet Failed to Send");
            }

            _udpClient.Close();

            if (sent)
                ReceiveAuthPacket();  //IF I COMMENT THIS OUT IT'LL WORK
        }

        private void ReceiveAuthPacket()
        {
            IPEndPoint e = new IPEndPoint(IPAddress.Any, 5001);
            UdpClient u = new UdpClient(e);
            u.Client.ReceiveTimeout = 3000;
            Console.WriteLine("Listening for Messages: ");

            try
            {
                Byte[] receiveBytes = u.Receive(ref e);
                string receiveString = Encoding.ASCII.GetString(receiveBytes);
                Console.WriteLine("Received: {0}", receiveString);

                string errMsg = "";
                if (AuthMessageParser.ParseMessage(receiveString, ref errMsg))
                {
                    _label.Content = "Authentication Successful!";
                    _label.Foreground = new SolidColorBrush(Colors.Green);
                }
                else
                {
                    _label.Content = "Authentication Unsuccessful: " + errMsg;
                    _label.Foreground = new SolidColorBrush(Colors.Red);
                }

            }
            catch (Exception)
            {
                _label.Content = "Authentication Unsuccessful";
                _label.Foreground = new SolidColorBrush(Colors.Red);
                Console.WriteLine("UDP Auth Packet was NOT Received.");
            }

            u.Close();
        }

Ответы на вопрос(1)

Ваш ответ на вопрос