读书人

关于timer运作次数的提问

发布时间: 2013-08-01 15:23:18 作者: rapoo

关于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中

读书人网 >VB Dotnet

热点推荐