最近遇到一个问题,在窗体中定义了一个静态的窗体定时器,用来查询设备的启动状态,当设备启动后,自动更新软件控件的使能,但是也是由于这个静态的定时器,导致了问题的存在。
每次更改设备时,都会重新生成一个窗体
// 增加设备信息窗口
private void btnToolSysDevInfo_Click(object sender, EventArgs e)
{
List<string> timerrunning;
//CTimerManagement CTimer = new CTimerManagement();
timerrunning = timerManager.GetEnabledTimers();
if (((timerrunning.Count == 1) && (timerrunning.Contains(CGlobalValue.CONST_STR_TIMER_IQUIRE_STATE))) || (timerrunning.Count == 0))
{
frmInfo mInfo = new frmInfo(this);//生成新的窗体
mInfo.StartPosition = this.StartPosition;
mInfo.ShowDialog(this);
}
else
{
MessageBoxEx.Show(this, Properties.Resource.STR_CLOSE_MEASURE_BEFORE_USE);
}
}
我在frmInfo中定义了
/// <summary>
/// 查询灯状态信息的定时器
/// </summary>
private static System.Windows.Forms.Timer m_QryTimer;
并且实例化了定时器事件:
/// <summary>
/// 查询灯状态定时器处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void m_QryTimer_Tick(object sender, EventArgs e)
{
try
{
//执行查询动作
QueryLampStatus();
//氘灯钨灯控制都已经结束,则应该停止定时器
if ((m_bD2Ctrl == false) && (m_bWCtrl == false))
{
//停止定时器
m_QryTimer.Stop();
}
m_s32TimerTickCnt++;
if (m_s32TimerTickCnt >= QRY_LAMP_STATUS_TRY_CNT)
{