私が取り組んでいるプロジェクトにタイマーを実装しています。ボタンが押されるたびにタイマーが起動します。
最初に押すと、タイマーの期間が設定され、タイマーが開始されます。タイマーが刻むたびに、プログラムは期間を減らして画面に出力します。それは完全に機能します...タイマーの実行中にもう一度ボタンを押すまで。これを行うと、tick イベントのアクションは、実行中にボタンを押した回数だけ発生します。
私のXAMLは次のようになります。
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock x:Name="tBox" Text="TIMER" Grid.Row="0" HorizontalAlignment="Center" Style="{StaticResource PhoneTextTitle2Style}"/>
<TextBlock x:Name="timer" Text="00" Grid.Row="1" HorizontalAlignment="Center" Style="{StaticResource PhoneTextTitle1Style}"/>
</Grid>
<Button
Grid.Row="1"
Grid.Column="0"
Content="Online"
HorizontalAlignment="Center"
Width="200"
Height="75" Click="trigger" />
そして私のC#は次のようになります:
public partial class MainPage : PhoneApplicationPage
{
int duration = 0;
int converted = 0;
int count = 0;
DispatcherTimer tmr = new DispatcherTimer();
// Constructor
public MainPage()
{
InitializeComponent();
}
private void trigger(object sender, RoutedEventArgs e)
{
resetTimer();
timer.Text = "30";
tmr.Interval = TimeSpan.FromSeconds(1);
tmr.Tick += OnTimerTick;
tmr.Start();
}
void OnTimerTick(object sender, EventArgs args)
{
converted = duration - 1;
timer.Text = converted.ToString();
duration = converted;
tBox.Text = strConvert;
count = count + 1;
if (duration == 0)
{
tmr.Stop();
}
}
void resetTimer()
{
count = 0;
DispatcherTimer tmr = new DispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(0);
duration = 30;
converted = 0;
tmr.Stop();
}
}