gpt4 book ai didi

属性内的 C# 计时器

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:40 25 4
gpt4 key购买 nike

我正在尝试为复选框实现一个计时器。复选框的绑定(bind)是使用 CaptureColorBind 属性完成的。当我单击捕获颜色复选框 (captureColor = true) 时,需要选中它 5 秒,然后需要取消选中该复选框。我正在尝试在计时器之前和之后打印日期时间以进行验证。它正确地打印了之前的时间,但是我在经过的事件处理程序中打印的日期时间被打印了 n 次,具体取决于我单击捕获颜色复选框的次数。那是我第一次点击,它打印一次日期和时间,我第二次点击,它打印两次,依此类推。不确定我做错了什么。

private System.Timers.Timer timer = new System.Timers.Timer();
public bool CaptureColorBind
{
get
{
return this.captureColor;
}

set
{
this.captureColor = value;
if (captureColor == true)
{
Console.WriteLine(DateTime.Now.ToString());
Console.WriteLine();
timer.Elapsed += new ElapsedEventHandler(capturecolor_timer);
timer.Interval = 5000;
timer.Enabled = true;
}
if (null != this.PropertyChanged)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("CaptureColorBind"));
}
}
}

// Timer for capturecolor checkbox
private void capturecolor_timer(object sender, ElapsedEventArgs e)
{
timer.Enabled = false;
this.captureColor = false;
//this.colorCheckbox.IsChecked = false;
Console.WriteLine(DateTime.Now.ToString());
Console.WriteLine();
if (null != this.PropertyChanged)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("CaptureColorBind"));
}
}

最佳答案

每次设置值时,您都在添加一个新的事件处理程序。您应该只添加一次。

尝试在对象的构造函数中添加事件处理程序,使其只设置一次,并在设置属性时重新启用计时器。

private System.Timers.Timer timer = new System.Timers.Timer();
public MyObject()
{
timer.Elapsed += new ElapsedEventHandler(capturecolor_timer);
timer.Interval = 5000;
}

关于属性内的 C# 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com