我在使用
实现的Windows Phone 7.1应用程序中有一个计时器DispatcherTimer _timer;
初始化为
Sample._timer = new DispatcherTimer();
Sample._timer.Interval = new TimeSpan(0, 0, 1);
Sample._timer.Tick += new EventHandler(Timer_Tick);
Sample._timer.Start();
private void Timer_Tick(object sender, EventArgs e)
{
double newValue = Sample.Value + 1.686;
if (newValue >= 100)
newValue = 0;
Sample.Value = newValue;
txtDigitalClock.Text = GetTime();
}
public string GetTime()
{
time += TimeSpan.FromSeconds(1);
return string.Format("{0:D2}:{1:D2}:{2:D2}", time.Hours, time.Minutes, time.Seconds);
}
这在正常情况下工作正常
这是我的问题
1)当手机处于锁定状态(屏幕已定位)时,计时器未运行
2)应用程序在后台运行时,计时器未运行(当您按下Windows手机中的开始按钮时,应用程序将转到后台)。
任何帮助将不胜感激..
答案 0 :(得分:1)
要在锁定屏幕下运行您的应用程序(和计时器),您必须禁用ApplicationIdleDetectionMode
如果你没有禁用闲置,你的应用程序将停止,因为它在MSDN处说:
This event (Deactivation) is also raised if the device’s lock screen is engaged, unless application idle detection is disabled.
如果你想在后台运行Timer(例如在按下Start buton后),你将无法执行此操作,因为MSDN说:
When the user navigates forward, away from an app, after the Deactivated event is raised, the operating system will attempt to put the app into a dormant state. In this state, all of the application’s threads are stopped and no processing takes place, but the application remains intact in memory.
更大的问题是当你的应用程序被逻辑删除时 - 应用程序不会在内存中占用(全部)。
您可以尝试使用Background Agents完成工作,但这是其他故事。
当您的应用程序禁用空闲或使用后台代理时,请记住Certification requirements。
类似的问题是here。
答案 1 :(得分:0)
我在谷歌上搜索了你的问题(因为我没有进入Winphone)并找到了
http://stackoverflow.com/questions/8352515/how-can-i-run-my-windows-phone-application-in-background
显然,这根本不可能。 我希望这能回答你的问题答案 2 :(得分:0)
请写下行定时器初始化
ApplicationIdleModeHelper.Current.HasUserAgreedToRunUnderLock = true;
答案 3 :(得分:0)
我通过在隔离存储上保存值的起始计时器来解决此问题
IsolatedStorageSettings.ApplicationSettings.Add("TimerStarted",DateTime.UtcNow);
当应用程序在转到后台后重新激活时,我将在隔离存储中查找此值并使用它来显示计时器