我正在开发一个通过 WMI 查询服务器状态的应用程序,我被要求使其自动循环,并且它可以将查询排队以每隔一段时间获取几台服务器的状态。我遇到的问题是,在创建第一个计时器时建立的值在第二个计时器(如服务器名称和查询类型)时发生了变化。这是代码的一部分:
public System.Threading.Timer[] schedquery = new System.Threading.Timer[10];
private void button1_Click(object sender, EventArgs e)
{
schedquery[C3MonitorApp.globalVars.tmrArray] = new System.Threading.Timer(writeLog);
schedValues.schedTurns = 120 / schedValues.schedTimer;
schedquery[C3MonitorApp.globalVars.tmrArray].Change(1000, 0);
C3MonitorApp.globalVars.tmrArray++;
}
public void writeLog(object state)
{
//do queries and write results to file then check if the timer
//has done certain amount of loops and dispose or restart
schedValues.schedTurnCounter++;
if (schedValues.schedTurnCounter == schedValues.schedTurns)
{
this.Dispose();
}
else
{
System.Threading.Timer t = (System.Threading.Timer)state;
t.Change(1000 * 60 * schedValues.schedTimer, 0);
}
}
写入日志函数从公共类获取服务器名称和查询类型,因此我希望以某种方式存储服务器名称等这些值,以便计时器使用原始值而不是用于创建第二个、第三个或第四个计时器。
问候。