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 |