본문 바로가기

C#

[C#] WPF를 이용한 특정 값에 도달했을 때 알람이 울리고 UI가 깜빡이는 예제

using System;
using System.Threading;
using System.Windows;
using System.Windows.Media;

namespace AlarmExample
{
	public partial class MainWindow : Window
    {
    	private bool alarmActive = false;
        private bool blinkActive = false;
        
        public MainWindow()
        {
        	InitializeComponent();
            
            //값 감시를 위한 스레드 시작
            Thread watchThread = new Thread(new ThreadStart(WatchValue));
            watchThread.Start();
        }
        
        //값을 감시하고 알람을 울리고 UI를 깜빡거리게 만드는 메서드
        private void WatchValue()
        {
        	while(true)
            {
            	//간단한 시뮬레이션 위한 랜덤값 생성
                Random rand = new Random();
                int value = rand.Next(0,100);
                
                //임계값 설정
                int threshold = 80;
                
                //값이 임계값을 초과하면 알람을 울림
                if(value > threshold)
                (
                	if(!alarmActive)
                    {
                    	//알림을 울림
                        MessageBox.Show("Alarm!");
                        alarmActive = true;
                        
                        //UI를 다시 정상적인 상태로 복구
                        Dispatcher.Invoke(() =>
                        {
                        	RestoreUI();
                        });
                    }
                    
                    //잠시 대기
                    Thread.Sleep(1000);
                }
            }
            
            //UI를 깜빡거리게 만드는 메서드
            private void BlinkUI()
            {
            	SolidColorBrush originalBrush = (SolidColorBrush)Background;
                SolidColorBrush blinkBrush = new SolidColorBrush(Colors.Red);
                
                blinkActive = true;
                while (blinkActive)
                {
                	Background = originalBrush;
                    Thread.Sleep(500);
                    Background = blinkBrush;
                    Thread.Sleep(500);
                }
            }
            
            //UI를 다시 정상적인 상태로 복구하는 메서드
            private void RestoreUI()
            {
            	blinkActive = flase;
                Background = new SolidColorBrush(Colors.White);
            }
        }
    }

'C#' 카테고리의 다른 글

[C#] TCP 서버 TcpListener 클래스와 사용법(예제)  (0) 2024.06.21
[C#] 네트워크, TCP  (0) 2024.06.21
[C#] Task async / await  (0) 2024.05.29
[C#] 클래스의 설계  (0) 2024.05.27
[C#] 처리의 제어  (0) 2024.05.24