0

看来我需要一些帮助(再次:/)。我的实际问题是计时器。我创建了一个 Timer 来每 n 秒执行一次特定的功能。到目前为止,一切正常,但该功能似乎随着时间的推移而运行。为什么我这么期待?好吧,我做了一些 Console.Writes 来看看发生了什么,我看到有时看起来我的 Timer 正在同时做两次......

也许我的输出控制台的一个例子:

Start_Monitoring  [ 06.09.2013 11:16:18 ]
 Stop_Monitoring  [ 06.09.2013 11:16:18 ]
Start_Monitoring  [ 06.09.2013 11:16:23 ]
__StopMonitoring
Start_Monitoring  [ 06.09.2013 11:16:32 ]
 Stop_Monitoring  [ 06.09.2013 11:16:32 ]
Start_Monitoring  [ 06.09.2013 11:16:32 ]
 Stop_Monitoring  [ 06.09.2013 11:16:32 ]
Start_Monitoring  [ 06.09.2013 11:16:37 ]
 Stop_Monitoring  [ 06.09.2013 11:16:37 ]
Start_Monitoring  [ 06.09.2013 11:16:37 ]
 Stop_Monitoring  [ 06.09.2013 11:16:37 ]

Start-/Stop Monitoring 是 Console.Write 顶部和我的函数的 bot,由我的计时器执行。__StopMonitoring 表示停止计时器的功能已被执行。遵循代码部分:

    public void Start_Monitoring()
    {
        Console.Write("Start_Monitoring  [[[[[[[[[[[[[[[[[[[[[ " + System.DateTime.Now + " ]]]]]]]]]]]]]]]]]]]\n");
        
        /* something will be done here ... */

        if (iCount_Popups > 0)
        {
            Stop_Monitoring();
            return;
        }
        else
        {
            /* something will be done here ... */
        }
        Console.Write("Stop_Monitoring  [[[[[[[[[[[[[[[[[[[[[ " + System.DateTime.Now + " ]]]]]]]]]]]]]]]]]]]\n\n\n\n\n");
    }

    public void Stop_Monitoring()
    {
        Console.Write("__StopMonitoring\n");
        myTimer.Stop();
    }

    // === #TIMER# ==================================================

    public System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
    
    public void CreateTimer()
    {
        myTimer.Tick += new EventHandler(Timer_Event);
        myTimer.Interval = GeneralSettings.AdlibInterval;
        myTimer.Start();
    }

    public void Timer_Event(Object myObject, EventArgs myEventArgs)
    {
        Start_Monitoring();
    }
    // =========================================================================

我不知道这个 Code-Parts 是否足以获得一些帮助,如果没有,如果您能告诉我,我将不胜感激。

我还尝试使用 Timer.Interval。GeneralSettings.AdlibInterval 等于 5000 (ms)。我已经考虑过应该在区间内完成的事情比区间需要更多的时间。这不是这里的问题。我能看到的最长时间是 1 秒,所以假设是 2 秒。但是,例如,至少 10000 毫秒的间隔对于使用此应用程序来说是一种方法。

也许还有一些其他信息:环境是 Microsoft Visual Studio 2012 Express - Windows 桌面它是一个 Windows-Form-Application ...和我的第一个 C# 项目。因此,我保证我做了一些研究,但大多数情况下我无法获得解决方案,因为每个人都在那里发布代码并且几乎每次错误都是由开发人员完成的。

编辑:

    public void button1_Click(object sender, EventArgs e)
    {    
        CreateTimer();
    }
4

2 回答 2

2

每次单击按钮时,您的 CreateTimer 方法都会添加另一个 Tick 处理程序,因此您的刻度事件将被称为您单击 button1 的次数。

在表单设计器或表单初始化/显示方法中设置间隔和 Tick 处理程序。

于 2013-09-06T09:56:01.733 回答
1

每次单击 button1 时,都会创建一个新计时器。我认为您应该在表单构造函数中创建计时器并从按钮单击事件开始

public void button1_Click(object sender, EventArgs e)
{    
    myTimer.Start();
}

抱歉,我没有关注新的,而是关注事件处理程序

myTimer += ...
于 2013-09-06T09:46:53.777 回答