首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

关于timer运作次数的提问

2013-08-01 
关于timer运行次数的提问如题,下面代码实现单击后执行某些操作并激活timerPrivate Sub Button9_Click() Ha

关于timer运行次数的提问
如题,下面代码实现单击后执行某些操作并激活timer
Private Sub Button9_Click() Handles Button9.Click
...........................
Timer1.Interval = 100
        AddHandler Timer1.Tick, AddressOf Timer1_Tick
        Timer1.Start()
 End Sub
Private Sub Timer1_Tick()
 If FileLen("C:\text.txt") > 0 Then
.............
 End If
End Sub
问题出现了,当我第一次单击时,Timer1_Tick()运行一次,第二次单击,Timer1_Tick()运行两次,第三次单击,Timer1_Tick()运行三次,依此类推,且在运行时text.txt肯定不是空的,为什么会多次执行代码呢!
谢谢!
[解决办法]
VB 不太懂   看你的代码

我觉得问题会不会是出现在
AddHandler Timer1.Tick, AddressOf Timer1_Tick
这里

你每次点击都会注册一个事件

多次点击后 就相当于重复注册了多个事件
那么你的Timer1_Tick() 这个方法的运行次数
当然是一次递增的

你应该考虑
AddHandler Timer1.Tick, AddressOf Timer1_Tick
定义这个事件的时候  不要放在点击里面
[解决办法]
        #region 时间控件
        private void timer_run_Tick(object sender, EventArgs e)
        {

            _time++;
            this.Text = this.Text + ".";
            if ((this.Text.Length - this.Text.IndexOf('.')) > 3)
            {
                this.Text = this.Text.Substring(0, this.Text.IndexOf('.'));
            }
            #region 判断执行(线程导入)
            if (!isRun)
            {
                


                but_stop.Enabled = true;
                switch (txt_time_unit.Text.Trim())
                {
                    case "秒":
                        if (_time >= txt_time.Value)
                        {
                            _form_loading = new Form_Loading();
                            but_stop.Enabled = false;
                            m_thread = new Thread(new ThreadStart(Exec));
                            m_thread.SetApartmentState(ApartmentState.STA);
                            m_thread.Start();
                            if (this.WindowState!=FormWindowState.Minimized)
                            {
                                _form_loading.ShowDialog();
                            }
                        }
                        break;


                    case "分":
                        if (_time / 60 >= txt_time.Value)
                        {
                            _form_loading = new Form_Loading();
                            but_stop.Enabled = false;
                            m_thread = new Thread(new ThreadStart(Exec));
                            m_thread.SetApartmentState(ApartmentState.STA);
                            m_thread.Start();
                            if (this.WindowState != FormWindowState.Minimized)
                            {
                                _form_loading.ShowDialog();
                            }
                        }
                        break;
                     default:
                        if (_time / (60 * 60) >= txt_time.Value)


                        {
                            _form_loading = new Form_Loading();
                            but_stop.Enabled = false;
                            m_thread = new Thread(new ThreadStart(Exec));
                            m_thread.SetApartmentState(ApartmentState.STA);
                            m_thread.Start();
                            if (this.WindowState != FormWindowState.Minimized)
                            {
                                _form_loading.ShowDialog();
                            }
                        }
                        break;
                }
            }
            #endregion
        }

        #region 执行导入

        private void Exec()
        {
          .....
        }
这个是一个定时执行的代码,原理是一样的


 
[解决办法]

Timer1.Interval = 100
AddHandler Timer1.Tick, AddressOf Timer1_Tick
移到Form_Load中

热点排行