C# 计时器方法在方法内部时不会触发

C# 计时器方法在方法内部时不会触发,c#,timer,C#,Timer,我有一个方法叫做 public void OnCaptured(CaptureResult captureResult){} 在这些方法中,我想调用计时器,我尝试启用计时器,但它根本不会触发,我还尝试创建另一个方法,并在上面的方法中调用它来调用计时器滴答声,但再次完全不起作用 这是我的计时器代码: private void TimeCountDown_Tick(object sender, EventArgs e) { int count = int.Parse(lblCount.Te

我有一个方法叫做

public void OnCaptured(CaptureResult captureResult){}
在这些方法中,我想调用计时器,我尝试启用计时器,但它根本不会触发,我还尝试创建另一个方法,并在上面的方法中调用它来调用计时器滴答声,但再次完全不起作用

这是我的计时器代码:

private void TimeCountDown_Tick(object sender, EventArgs e)
{
    int count = int.Parse(lblCount.Text) -1;
    InvokeCD(count.ToString());
     if (count < 0) {
       TimeCountDown.Enabled = false;
       InvokeCD("5");
     }
}
private void TimeCountDown_Tick(对象发送方,事件参数e)
{
int count=int.Parse(lblCount.Text)-1;
InvokeCD(count.ToString());
如果(计数<0){
TimeCountDown.Enabled=false;
调用ECD(“5”);
}
}
必须调用Start()方法才能使计时器工作。仅将属性设置为Enabled为true是不够的

这必须起作用:

System.Timers.Timer timer = new System.Timers.Timer(1000); //it will run every one second

public void OnCaptured(CaptureResult captureResult)
{
     timer.Elapsed += TimeCountDown_Tick;
     timer.Start();
}

private void TimeCountDown_Tick(object sender, System.Timers.ElapsedEventArgs e)
 {
    int count = int.Parse(lblCount.Text) -1;
    InvokeCD(count.ToString());
     if (count < 0) {
       TimeCountDown.Enabled = false;
       InvokeCD("5");
     }
}
System.Timers.Timer=新的System.Timers.Timer(1000)//它将每隔一秒钟运行一次
捕获后的公共无效(CaptureResult CaptureResult)
{
timer.appeased+=时间倒数_Tick;
timer.Start();
}
私有void TimeCountDown_Tick(对象发送方,System.Timers.ElapsedEventArgs e)
{
int count=int.Parse(lblCount.Text)-1;
InvokeCD(count.ToString());
如果(计数<0){
TimeCountDown.Enabled=false;
调用ECD(“5”);
}
}

您使用的是哪个计时器?在.NET Framework中至少有3个
Timer
类,它们都非常不同。我怀疑你在用那个。如果这是正确的,一个可能的问题是计时器必须在UI线程上运行代码。如果你在其他任务中绑定了UI线程,计时器将不会启动。哦,伙计,你比我快了30秒:是的,我正在使用Windows窗体中的计时器。我要怎么触发它?是的,表单i正在执行其他任务。您需要将CPU绑定的工作移出UI线程。您可以通过创建一个新的
任务
来实现这一点,也可以在此处添加异步活动。无法判断,因为我们不知道该代码的性质。OP使用的是WinForms而不是系统中的
计时器。计时器
他们使用的是
System.Windows.Forms.Timer
。如果他们切换到
System.Timers.Timer
,这将允许计时器启动,但随后他们将陷入从不同线程访问UI元素的痛苦世界。他们无法通过调用,因为他们的原始代码不起作用的全部原因是因为他们让UI线程忙。@Damien_the_unsiver哈哈,那次我打败了你:Pi修改了我的代码,这就像我想要的那样工作,谢谢你。@Denver-你可能认为这已经修复了,但你所做的只是用一个微妙的错误替换了一个明显的错误(除非您还从计时器代码中删除了对UI元素的所有访问)。