Я пытаюсь закодировать таймер в UWP.
Я хочу, чтобы мой таймер сделал цикл, который отсчитывает, например, 1 минуту, а затем отсчитывает 2-минутную паузу, все это 5 раз подряд, без необходимости повторного нажатия кнопки запуска.
Я могу отсчитать 1 минуту и войти в 2-минутную паузу, но не могу понять, как вернуться к 1-минутному отсчету. Цикл просто застрял в 2-минутной паузе.
Я пытался сделать IF, иначе. Я пробовал bool, правда, ложь ..
public sealed partial class MainPage : Page
{
public int x;
static FenetreParametres infopage = FenetreParametres.Current;
static int Task = Int32.Parse(infopage.getTmpRound());
//static int nb = Int32.Parse(infopage.getNbRound());
//static int pause = Int32.Parse(infopage.getTmpPause());
MediaPlayer player;
private int _restsTaken { get; set; }
private int _currentTime { get; set; }
private DispatcherTimer _timer { get; set; }
private TimeSpan _tickInterval { get; set; }
private TimeSpan _intervalRemainingTime { get; set; }
private DateTime _intervalEnd { get; set; }
private bool _isRunning = false;
private bool verif = false;
public MainPage()
{
this.InitializeComponent();
_currentTime = 0;
_tickInterval = TimeSpan.FromSeconds(1);
this.initializeTimer(_tickInterval.Seconds);
this.initializeDisplayTimer(0);
player = new MediaPlayer();
}
private void initializeTimer(int tickInterval)
{
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds(tickInterval);
_timer.Tick += interval_Tick;
}
private void initializeDisplayTimer(int intervalTime)
{
_intervalRemainingTime = TimeSpan.FromMinutes(intervalTime);
timerLabel.Text = _intervalRemainingTime.ToString();
}
private void interval_Tick(object sender, object e)
{
int previousTimeInMinutes = _intervalRemainingTime.Minutes;
_isRunning = true;
_intervalRemainingTime = _intervalRemainingTime.Subtract(_tickInterval);
timerLabel.Text = _intervalRemainingTime.ToString();
if (previousTimeInMinutes != _intervalRemainingTime.Minutes)
{
string timeIndicator = _intervalRemainingTime.Minutes == 0 ? "1 >" : _intervalRemainingTime.Minutes.ToString();
}
if (TimeSpan.Equals(_intervalRemainingTime, TimeSpan.Zero))
{
playmusic();
this.initializeDisplayTimer(2);
}
}
private async void playmusic()
{
Windows.Storage.StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets");
Windows.Storage.StorageFile file = await folder.GetFileAsync("ding.wav");
player.AutoPlay = false;
player.Source = MediaSource.CreateFromStorageFile(file);
player.Play();
}
private void trait()
{
for (int i = 1; i <= 3; i++)
{
//timerLabel.Text = "Pause";
//x = duree;
playmusic();
_currentTime = x;
this.initializeDisplayTimer(_currentTime);
x--;
_intervalEnd = DateTime.Now.Add(_intervalRemainingTime);
_timer.Start();
}
}
private void Button_Click_Start(object sender, RoutedEventArgs e)
{
if (TimeSpan.Equals(_intervalRemainingTime, TimeSpan.Zero))
{
playmusic();
this.initializeDisplayTimer(Task);
_timer.Start();
}
}
private void Button_Click_Pause(object sender, RoutedEventArgs e)
{
_isRunning = false;
_timer.Stop();
}
private void Button_Click_Reset(object sender, RoutedEventArgs e)
{
_timer.Stop();
this.initializeDisplayTimer(_currentTime);
}
}
Ожидается, что он перейдет в паузу на 2 минуты, а затем вернется к обратному отсчету в 1 минуту, 5 раз подряд