저는 프로그래밍에있어 C# newbie_and입니다. 카운트 다운 타이머로 수학 퀴즈 앱을 만들려고합니다.C# 카운트 다운 타이머 재설정 - DispatcherTimer- 창문에 앱 저장
나는 사용자가 시작 버튼을 클릭 할 때마다 방정식을 생성하고 응답하는데 최대 60 초를줍니다. 사용자는 자신의 대답이 틀리거나 옳지 않은지에 대한 답변을하고 새로운 방정식을 위해 다시 클릭 할 수 있습니다. 그래서 사용자가 새로운 임의의 방정식을 볼 때마다 타이머를 재설정하고 싶습니다. 지금까지는 60 초의 시간 간격이 경과했을 때만 재설정 할 수 있었지만 제대로 작동하지 않는 경우도 있었으며 때로는 60 초 대신 59 초 또는 58 초를 표시하는 경우도있었습니다.
지금까지 다른 질문을 읽지 않았 으면 많은 도움이되지 못했습니다. 타이머가 나를 혼란스럽게한다. 또한 코드를 더 간단하고 우아하게 만들기위한 제안을 수락합니다. 당신이 여기에 적어도 두 가지 중요한 문제가 나에게 보인다
EquationView.xaml.cs
public sealed partial class EquationView : Page
{
DispatcherTimer timer = new DispatcherTimer();
int tick = 60;
int result;
public EquationView()
{
this.NavigationCacheMode = NavigationCacheMode.Enabled;
this.InitializeComponent();
}
private void startButton_Click(object sender, RoutedEventArgs e)
{
// Once clicked then disabled
startButton.IsEnabled = false;
// Enable buttons required for answering
resultTextBox.IsEnabled = true;
submitButton.IsEnabled = true;
var viewModel = App.equation.GenerateEquation();
this.DataContext = viewModel;
result = App.equation.GetResult(viewModel);
timer.Interval = new TimeSpan(0, 0, 0, 1);
//timer.Tick += new EventHandler(timer_Tick);
timer.Tick += timer_Tick;
timer.Start();
DateTime startTime = DateTime.Now;
// Reset message label
if (message.Text.Length > 0)
{
message.Text = "";
}
// Reset result text box
if (resultTextBox.Text.Length > 0)
{
resultTextBox.Text = "";
}
}
private void timer_Tick(object sender, object e)
{
Countdown.Text = tick + " second(s) ";
if (tick > 0)
tick--;
else
{
Countdown.Text = "Times Up";
timer.Stop();
submitButton.IsEnabled = false;
resultTextBox.IsEnabled = false;
startButton.IsEnabled = true;
tick = 60;
}
}
private void submitButton_Click(object sender, RoutedEventArgs e)
{
timer.Stop();
submitButton.IsEnabled = false;
resultTextBox.IsEnabled = false;
if (System.Text.RegularExpressions.Regex.IsMatch(resultTextBox.Text, "[^0-9]"))
{
MessageDialog msgDialog = new MessageDialog("Please enter only numbers.");
msgDialog.ShowAsync();
resultTextBox.Text.Remove(resultTextBox.Text.Length - 1);
//Reset buttons to answer again
submitButton.IsEnabled = true;
resultTextBox.IsEnabled = true;
timer.Start();
}
else
{
try
{
int userinput = Int32.Parse(resultTextBox.Text);
if (userinput == result)
{
message.Text = "Bingo!";
App.player.UpdateScore();
startButton.IsEnabled = true;
}
else
{
message.Text = "Wrong, sorry...";
startButton.IsEnabled = true;
}
}
catch (Exception ex)
{
MessageDialog msgDialog = new MessageDialog(ex.Message);
msgDialog.ShowAsync();
submitButton.IsEnabled = true;
resultTextBox.IsEnabled = true;
timer.Start();
}
}
}
방금 방정식을 생성하기 전에 Timer.Stop을 넣으십시오. –