您好我正在开发的程序中存在计时器问题。计时器运行并调用方法,在一段时间后从远程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
}
}
答案 0 :(得分:3)
尝试在执行管理任务之前禁用计时器,然后重新启用:
tmrStore.Enabled = false;
try{
// do stuff
}finally{
tmrStore.Enabled = true;
}
问题的原因可能是你的计时器处理程序的主体执行时间比你的Timer.Ticks值要长,所以你的计时器事件开始叠加在一起。
您也可以考虑将此代码放在线程而不是计时器中,以便它独立于您的用户界面。
答案 1 :(得分:0)
我的第一个猜测是你正在多次执行的地方设置你的Timer.Tick事件。我会尝试搜索“tmrStore.Tick + =”以查看所有方法添加到事件的位置。
答案 2 :(得分:-1)
是的,我已经解决了这个问题,因为我有一个我正在使用的类将检索到的信息写入文本框,在其中我调用了一个新的表单实例来访问文本框doh!
感谢您的帮助,但毫无疑问,我会很快回来再多说一段时间