C#计时器不会打勾

前端之家收集整理的这篇文章主要介绍了C#计时器不会打勾前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个奇怪的问题
过去几个小时,我一直在想我
我放在我的winform代码(从工具栏)的计时器不会打勾…

我在我的程序中有几个表单的计时器,他们都工作正常…我尝试完全一样,它不会打勾…
我选择它,拖动到窗体,启用它,设置间隔和处理tick事件…没有任何反应…
我甚至尝试把随机代码像messageBox.show在tick事件只是为了看是否有任何事情,没有什么!
正如我所说,在我的程序中有一个更多的计时器(在其他形式,不是在我想要放这个计时器),他们都工作正常…

有什么建议么?

提前致谢!

解决方法

我发现如果我从非UI线程停止计时器,那么再次启动它,我失去了事件钩子.

我不知道“适当”的答案是什么,但对我来说这是很好的:

public class BetterTimer : System.Windows.Forms.Timer
{
    public BetterTimer():base()        
    { base.Enabled = true; }

    public BetterTimer(System.ComponentModel.IContainer container) : base(container) 
    { base.Enabled = true; }

    private bool _Enabled;
    public override bool Enabled
    {
        get { return _Enabled; }
        set { _Enabled = value; }
    }

    protected override void OnTick(System.EventArgs e)
    { if (this.Enabled) base.OnTick(e); }
}

这样做的三件事情

1)通过覆盖构造函数,我确保从一开始就启用了基本定时器.

2)通过覆盖“已启用”,我从不让基地址计时器被禁用,但是接口没有改变.

3)通过覆盖“OnTick”,我让覆盖的Enabled属性决定事件是否触发.

Start()和Stop()分别通过将Enabled属性设置为true和false来工作.

BTW – 有没有人知道为什么事件永远不会触发(或断开?)当定时器从非UI线程停止/禁用?

猜你在找的C#相关文章