当打开子窗体时,Winforms计时器不工作

kh212irz  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(88)
  • 更新详细信息--
    当我在timer1_Tick设置了点中断后,我发现了下面的一些情况:
    1.当我没有运行frmSettings时,frmSettings中的计时器1已经运行。
    1.当frmSetting运行时,我设置了断点来检查init数据和timer1.enable为true后的状态,但打开表单后没有运行timer1_Tick。
    1.运行frmSetting后,timer1_Tick有时能运行,有时不能运行
    1.如果有另一个子窗体运行,frmSetting中的timer1_Tick有时可以运行,有时不能运行。
    我不确定是不是因为多线程。
    chid窗体的按钮点击代码
public void tsmSetting_Click(object sender, EventArgs e)
    {
        DataView dvView = Handler.GetView("Type = 'S');
        
        _frmSetting = new frmSetting();
        _frmSetting.PassSettingMsg += _frmSendMsg_PassSettingMsg;
        _frmSetting.InitSettingData(dvView, dicStatus);
        _frmSetting.Show();
        _frmSetting.Activate();
    }

我花了几个小时试图解决这个问题,但还是没能解决。我的主窗体有一个按钮,单击该按钮将打开一个子窗体(frmSetting.cs)。我在子窗体中设置了一个计时器,但是当子窗体打开时,它不起作用。当子窗体关闭时或在我单击按钮打开子窗体之前,它就工作了!我不知道为什么,也解决不了。请帮帮我...这是我的代码:

frmSetting.designer.cs

//
//timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 3000;
this.timer1.Tick += new System.EventHandler(this.timerProtect_Tick);

frmWSetting.cs

public frmSetting()
{
    InitializeComponent();
    DoubleBuffered(dgvProtectAll, true);
}  

public new void DoubleBuffered(DataGridView dgv, bool setting)
{
    Type dgvType = dgv.GetType();
    PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
    BindingFlags.Instance | BindingFlags.NonPublic);
    pi.SetValue(dgv, setting, null);
}

private void timer1_Tick(object sender, EventArgs e)
{
    update_Cal();
    update_Value();
}
vvppvyoh

vvppvyoh1#

如果我没理解错的话,我想是因为你没有启动计时器。你是否运行了timerProtect.Start();在frmWSettingProtectAll_Load函数中?

相关问题