저는 C#으로 간단한 카운트 다운 - 응용 프로그램을 만들고 싶었습니다.C# 간단한 카운트 다운 - 내가 뭘 잘못하고 있니?
첫 번째 및 기본 버전의 경우 현재 시간을 초로 표시하는 Label과 카운트 다운을 시작하는 Button을 사용합니다. 버튼의 클릭 이벤트는 다음과 같이 구현 : 사용자가 시간의 선택 금액 만 (때문에 수면())에 (응용 프로그램이 정지 등) 시간이 실제로 카운트 다운 버튼을 클릭 지금
private void ButtonStart_Click(object sender, RoutedEventArgs e)
{
_time = 60;
while (_time > 0)
{
_time--;
this.labelTime.Content = _time + "s";
System.Threading.Thread.Sleep(1000);
}
}
레이블의 컨텍스트가 새로 고쳐지지 않습니다.
내가 일반적으로 잘못하고있는 것은 (스레드와 관련하여) 또는 UI에 문제가 있습니까?
답장을 보내 주셔서 감사합니다. 이제 System.Windows.Threading.DispatcherTimer를 사용하여 나에게 말한대로 할 수 있습니다. 모든 그래서이 질문은 공식적으로 대한 답변 잘 작동) 관심이있는 사람들을 위해
: 여기 내 코드 (핵심 부품)
public partial class WindowCountdown : Window
{
private int _time;
private DispatcherTimer _countdownTimer;
public WindowCountdown()
{
InitializeComponent();
_countdownTimer = new DispatcherTimer();
_countdownTimer.Interval = new TimeSpan(0,0,1);
_countdownTimer.Tick += new EventHandler(CountdownTimerStep);
}
private void ButtonStart_Click(object sender, RoutedEventArgs e)
{
_time = 10;
_countdownTimer.Start();
}
private void CountdownTimerStep(object sender, EventArgs e)
{
if (_time > 0)
{
_time--;
this.labelTime.Content = _time + "s";
}
else
_countdownTimer.Stop();
}
}