2009-07-16 53 views
3

你好,我目前在我正在开发的程序中有一个计时器的问题。计时器运行并调用在设定的一段时间后从远程PC检索Windows管理信息的方法,并重复此操作。C#计时器问题

第一次定时器调用这些一切都很好,但是第二次,在定时器完成任务后,它再次循环遍历自身,第三次运行它会执行3次等等。下面的代码工作正常它的计时器本身。

因此,任何帮助将appareciated,如果您需要任何进一步的细节,请让我知道。

下面是我的代码:

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 
      } 
     } 
+0

是否还有其他形式回事?你如何将tmrStore_Tick方法连接到事件? – 2009-07-16 18:39:31

+0

间隔是多少?那么这与处理程序需要的时间相比如何呢? – 2009-07-16 18:44:53

回答

-1

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

感谢您的帮助虽然球员毫无疑问,我会很快回来是一些更笑

3

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

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

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

你也可以考虑把这段代码放在一个线程中而不是一个定时器,以便它独立于你的用户界面。

0

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