Service.cs
public class Service
{
private Timer timer;
private int hours;
private int minutes;
public Service()
{
timer = new Timer();
timer.Interval = 60000;
timer.Tick += new System.EventHandler(OnTick);
// ...
}
public void StartTimer() { /* ... */ }
public void PauseTimer() { /* ... */ }
private void OnTick(object sender, EventArgs e)
{
if (minutes == 59) {
minutes = 0;
hours += 1;
} else {
minutes += 1;
}
//...
// NOW I WANT TO SET THE CONTENT OF servicePage.hoursl AND servicePage.minutesl
// ACCORDING TO THE VALUES I GET ON this.hours AND this.minutes
}
servicePage.xaml
<Label x:Name="hoursl" Grid.Row="1" Grid.Column="0" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Label x:Name="minutesl" Grid.Row="1" Grid.Column="2" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center"/>
servicePage.xaml.cs
public partial class servicePage : Page { /* ... */ }
我有一个名为Service的类,我需要为每个Service实例配备一个Timer。 然后我有一个带有2个标签的页面,1个小时(小时1)和1个小时(分钟1)。
有没有办法在函数OnTick()上访问servicePage上的标签? 并将这些标签的内容设置为计时器提供的小时和分钟值?
答案 0 :(得分:0)
看起来您的ServicePage需要订阅您的Service类发布的事件。通过这种方式,它将知道计时器何时停止。
然后你可以适当地更新这两个标签。
如果使用MVVM,您的视图模型将订阅该事件,并通过绑定更新视图中的标签。
这是一个简单的非MVVM示例:
public class Service
{
public delegate void TimerTickHandler(int hours, int minutes);
public event TimerTickHandler TimerTick;
.
.
.
private void OnTick(object sender, EventArgs e)
{
...
if (TimerTick != null)
TimerTick(hours, minutes);
}
}
现在,您的ServicePage类需要该Service类的实例并订阅该事件。如果你使用MVVM路由,将会采用类似的方法。
如果您的Service类仅在Application_Startup上实例化,如果有意义,您可以按照单例模式存储实例,以便其他类可以获取实例。只有每个应用程序只能有一个计时器实例时,这才有效。
Singleton:https://msdn.microsoft.com/en-us/library/ff650316.aspx
Service类是单例后,ServicePage.xaml.cs可以获取公共实例并订阅TimerTick事件。
希望这有帮助。