日期:2014-05-18  浏览次数:20947 次

c#timer奇怪的问题
昨天加了一个定时器:
C# code
 mCheckConnectTimer = new System.Windows.Forms.Timer();
            mCheckConnectTimer.Interval = Settings.Default.CheckConnectTimer * 1000 * 60;//N分钟检测
            mCheckConnectTimer.Tick += new EventHandler(mCheckConnectTimer_Tick);
            mCheckConnectTimer.Enabled = true;
 void mCheckConnectTimer_Tick(object sender, EventArgs e)
        {

            ConfigData cfgData = ReadConfigFile();
            string strIP = cfgData.Sip_Proxy_Name;
            Ping pingSender = new Ping();
            PingOptions pingOption = new PingOptions();
            pingOption.DontFragment = true;
            int timeout = 2000;//超时时间为2秒
            PingReply reply = pingSender.Send(strIP, timeout);
            if (reply.Status == IPStatus.Success)
            {
                //MessageBox.Show("能ping通 ");
                if (this.mPttRegSuccess == false)
                {

}
            }
            else
            {
                //MessageBox.Show("ping不通");
                if (this.mPttRegSuccess)
                {

                }
    
            }
        }


昨晚运行了一晚上,icmp包正常显示,每5分钟ping了一次目的ip。
结果今天十点多的时候,发现ping的时间间隔不对,变成了每30秒一次。
时间间隔为原来的十分之一,想问问版上的人,这是个什么问题。

------解决方案--------------------
bool runing=false;
void mCheckConnectTimer_Tick(object sender, EventArgs e)
{
if(runing)
return;
runing=true;
ConfigData cfgData = ReadConfigFile();
string strIP = cfgData.Sip_Proxy_Name;
Ping pingSender = new Ping();
PingOptions pingOption = new PingOptions();
pingOption.DontFragment = true;
int timeout = 2000;//超时时间为2秒
PingReply reply = pingSender.Send(strIP, timeout);
if (reply.Status == IPStatus.Success)
{
//MessageBox.Show("能ping通 ");
if (this.mPttRegSuccess == false)
{

}
}
else
{
//MessageBox.Show("ping不通");
if (this.mPttRegSuccess)
{

}

}

runing=false;
}