C#计时器问题

时间:2009-07-16 18:36:12

标签: c# .net timer

您好我正在开发的程序中存在计时器问题。计时器运行并调用方法,在一段时间后从远程PC检索Windows管理信息并重复此操作。

定时器第一次调用这一切都很好,但是第二次,在定时器完成任务后,它再次循环自身,第三次运行它就做了3次等等。下面的代码可以正常使用计时器本身。

所以任何帮助都会得到解决,如果您需要任何进一步的细节,请告诉我。

以下是我的代码:

private void tmrStore_Tick(object sender, EventArgs e)
    {
        string ipAdd;
        ipAdd = "127.0.0.1";
        List<TblServer> Server;

        WMIInfo localDB = new WMIInfo("Data Source=|DataDirectory|\\WMIInfo.sdf");

        Server = localDB.TblServer.ToList();

        if (Server.Count == 0)
        {

        }
        else
        {
            for (int counter = 0; counter < Server.Count; counter++)
            {
                CPUStore cpu = new CPUStore();
                cpu.Store(Server[counter].IpAdd);

                HDDStore hdd = new HDDStore();
                hdd.Store(Server[counter].IpAdd);

                MemStore mem = new MemStore();
                mem.Store(Server[counter].IpAdd);

                //delete items over 24 hours old 
            }
        }

3 个答案:

答案 0 :(得分:3)

尝试在执行管理任务之前禁用计时器,然后重新启用:

tmrStore.Enabled = false;
try{
    // do stuff
}finally{
    tmrStore.Enabled = true;
}

问题的原因可能是你的计时器处理程序的主体执行时间比你的Timer.Ticks值要长,所以你的计时器事件开始叠加在一起。

您也可以考虑将此代码放在线程而不是计时器中,以便它独立于您的用户界面。

答案 1 :(得分:0)

我的第一个猜测是你正在多次执行的地方设置你的Timer.Tick事件。我会尝试搜索“tmrStore.Tick + =”以查看所有方法添加到事件的位置。

答案 2 :(得分:-1)

是的,我已经解决了这个问题,因为我有一个我正在使用的类将检索到的信息写入文本框,在其中我调用了一个新的表单实例来访问文本框doh!

感谢您的帮助,但毫无疑问,我会很快回来再多说一段时间