private void btn_Start_Clicked(object sender, System.EventArgs e)
{
RunTimer(true);
}
private void btn_Pause_Clicked(object sender, System.EventArgs e)
{
RunTimer(false);
}
public void RunTimer(Boolean Value)
{
Boolean excuteTimer = Value;
TimeSpan TimeElement = new TimeSpan();
Device.StartTimer(new TimeSpan(0, 0, 1), () =>
{
if (Value)
{
TotalTime = TotalTime + TimeElement.Add(new TimeSpan(0, 0, 1));
label.Text = string.Format("{0:hh\\:mm\\:ss}", TotalTime);
// returning true will fire task again in 2 minutes.
return true;
}
// No longer need to recur. Stops firing task
return false;
});
}
我试图每隔一秒运行一次计时器。它运行良好但是当点击暂停时,它不会停止,直到再次点击开始。
答案 0 :(得分:0)
我不知道究竟是如何工作的,但我认为它的工作原理是这样的。 每当你点击RunTimer时,就会创建一个线程来运行计时器,所以当你按下Start时,计时器会启动并且每秒钟就会出现一次。但是,当您按Pause时,根据您的代码,第一个线程将继续运行,因为到目前为止它还没有返回false。这就是你的暂停不起作用的原因。 要解决这个问题,请尝试将Value作为一个全局字段(使其成为私有成员),并将其返回而不是true或false,这样当您单击暂停时,您可以使用" Value"假。
private bool _isRunning;
private void btn_Start_Clicked(object sender, System.EventArgs e)
{
_isRunning=true;
RunTimer();
}
private void btn_Pause_Clicked(object sender, System.EventArgs e)
{
_isRunning=false;
}
public void RunTimer()
{
TimeSpan TimeElement = new TimeSpan();
Device.StartTimer(new TimeSpan(0, 0, 1), () =>
{
TotalTime = TotalTime + TimeElement.Add(new TimeSpan(0, 0, 1));
label.Text = string.Format("{0:hh\\:mm\\:ss}", TotalTime);
// returning true will fire task again in 2 minutes.
return _isRunning;
});
}
我希望这对你有用,我自己没有尝试过,只是使用我的逻辑;)
答案 1 :(得分:0)
抱歉英语不好
Device.StartTimer命令在调用后启动一个独立的线程。单击“开始”时,StartTimer线程中的参数值将始终为true;
我建议你将Value变量移到线程外面,把它放在类级别再试一次。
答案 2 :(得分:0)
您可以使用以下代码更改代码:
public void RunTimer(Boolean value) {
Boolean executeTimer = value;
Device.StartTimer(new TimeSpan(0, 0, 1), () => {
string LblText = "";
if (value)
{
TotalTime = TotalTime - TimeElement.Add(new TimeSpan(0, 0, 1));
SMSSendLableText = string.Format("{0:hh\\:mm\\:ss}", TotalTime);
return true; }
else
{
return false;
}
});}