【问题标题】:Timer does not fire in a multi-thread form定时器不会以多线程形式触发
【发布时间】:2016-03-16 07:50:32
【问题描述】:

我在表单中有一个System.Timers.Timer 计时器。我还有一个从 RFID 设备读取的线程(功能:GetData())。我想用定时器来限制线程的时间,但是定时器没有触发。

System.Threading.Thread GetData;
System.Timers.Timer timer = new System.Timers.Timer();
int reverseCounter=1000;

    public CardDragMaifareFrm()
    {
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        timer.Interval = 10;
        timer.Enabled = true;
        timer.Start();
        GetData = new Thread(new ThreadStart(ReadCardData));
        GetData.Start();
    }
   void timer_Elapsed(object sender, EventArgs e)
   {
        if (reverseCounter > 0)
        {
            MessageBox.Show("hey");
            reverseCounter -= 1;
        }
        else
        {// some actions for terminating GetData thread}
    }

但我没有看到“嘿”消息...有人可以帮助我吗?谢谢

【问题讨论】:

  • “不起作用” - 什么不起作用?你看到MessageBox 了吗?不清楚reverseCounter 是什么,所以我们无法检查可能的逻辑错误。 reverseCounter -= reverseCounter 等于 reverseCounter = 0
  • 与您的问题没有直接关系的注释:timer.Enabled = truetimer.Start() 做同样的事情 - 您应该删除其中一个。
  • @Reza 我是正确的reverseCounter 但是计时器还没有触发
  • 10 毫秒不是一个很长的计时器......它似乎很奇怪,它根本不会触发。
  • System.Timers.Timer: "如果您将 System.Timers.Timer 类与用户界面元素(例如表单或控件)一起使用,但未将计时器放置在该用户界面元素上,请分配表单或包含 Timer 到 SynchronizingObject 属性的控件”(尽管我通常建议切换到 System.Windows.Forms.Timer,它设计从一开始就与 UI 正确互操作)

标签: c# multithreading winforms timer


【解决方案1】:

我使用了计算机工程的第一条规则:重新启动它,也许它会起作用”... ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多