C# 壁纸循环器上的计时器
我刚刚在一个项目中添加了一些额外的功能。我用一个额外的选项设置了我的项目,允许它在X时间后自动更改背景。X是从组合框中设置的。但是,我知道我这样做的方式很糟糕,因为我创建了一个新的timer类,将System.Timers.timer作为父类,所以当调用ElapsedEventHandler中的静态方法时,我能够返回表单并调用ChangeDesktopBackground() 以用户定义的间隔调用ChangeDesktopBackground()的更好方法是什么 这是我当前的解决方案,其中包括将发送方转换为继承的计时器,然后获取对表单的引用,然后调用ChangeDesktopBackground方法C# 壁纸循环器上的计时器,c#,timer,software-quality,C#,Timer,Software Quality,我刚刚在一个项目中添加了一些额外的功能。我用一个额外的选项设置了我的项目,允许它在X时间后自动更改背景。X是从组合框中设置的。但是,我知道我这样做的方式很糟糕,因为我创建了一个新的timer类,将System.Timers.timer作为父类,所以当调用ElapsedEventHandler中的静态方法时,我能够返回表单并调用ChangeDesktopBackground() 以用户定义的间隔调用ChangeDesktopBackground()的更好方法是什么 这是我当前的解决方案,其中包括将
private static void timerEvent(object sender, System.Timers.ElapsedEventArgs e)
{
((newTimer)sender).getCycleSettingsForm().ChangeDesktopBackground();
}
编辑:添加了显示当前解决方案的编码示例计时器可能是最直接的方法,尽管我不确定您是否正确使用了计时器。以下是我在项目中使用计时器的方式:
// here we declare the timer that this class will use.
private Timer timer;
//I've shown the timer creation inside the constructor of a main form,
//but it may be done elsewhere depending on your needs
public Main()
{
// other init stuff omitted
timer = new Timer();
timer.Interval = 10000; // 10 seconds between images
timer.Tick += timer_Tick; // attach the event handler (defined below)
}
void timer_Tick(object sender, EventArgs e)
{
// this is where you'd show your next image
}
然后,在更改处理程序上连接组合框,这样就可以更改timer.Interval。我以前写过类似的东西。System.Timers.Timer在这方面做得太过分了。出于以下几个原因,您可能应该使用System.Windows.Forms.Timer:
我会使用微软的反应式框架。只需获取“Rx WinForms” 代码如下:
var subscription =
Observable
.Interval(TimeSpan.FromMinutes(1.0))
.ObserveOn(this)
.Subscribe(n => this.getCycleSettingsForm().ChangeDesktopBackground());
要停止它,只需执行subscription.Dispose()
简单