为什么这个Visual Studio计时器组件在设计时工作?
本文关键字:工作 组件 Visual Studio 计时器 为什么 | 更新日期: 2023-09-27 18:08:10
在。net windows窗体应用程序中,有一个在窗体中启用的定时器。以下代码是句柄:
private void timer2_Tick(object sender, EventArgs e)
{
try
{
if ( !CheckLock())
{
MessageBox.Show("No lock found.");
this.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("No lock found.");
this.Close();
}
}
该锁为usb硬件锁。令人惊讶的是,代码显示这个弹出消息在设计时间(在VS 2010 IDE),如果我拿出锁。
有谁知道原因是什么吗?这很正常,您的代码也可以在设计时运行。这个方法的上下文不清楚,但是很有可能在继承这个方法所在的Form类时让计时器滴答作响。或者当你在UserControl中有这段代码时,你把它放到窗体上。
这是设计器提供所见即所得外观的主要方式。比如设置控件的BackgroundImage属性,也会立即在设计器中显示图像。换句话说,BackgroundImage属性setter和控件的OnPaintBackground()方法都在设计时执行。基本规则是基类中的任何代码都可以在设计时运行。您添加到派生类的代码不会。
修复它很容易,使用DesignTime属性来防止计时器在设计时处于活动状态。像这样:
timer2.Enabled = !this.DesignTime; // Instead of true
对于不希望在设计模式下运行的代码,可以使用以下条件:
if (!this.DesignMode)
{
// Code here only executes when running, not in design mode
}
这是因为计时器也在设计时运行。您应该测试代码是否在DesignMode下运行:
private void timer2_Tick(object sender, EventArgs e)
{
if( this.DesignMode ) return;
try
{
if ( !CheckLock())
{
MessageBox.Show("No lock found.");
this.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("No lock found.");
this.Close();
}
}
授予在设计时运行的控件、属性、事件和计时器和构建具有丰富设计时功能的Windows窗体控件和组件以获取更多背景信息。