c# - 为什么这个 Visual Studio 计时器组件在设计时工作?

标签 c# .net visual-studio ide

在 .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

关于c# - 为什么这个 Visual Studio 计时器组件在设计时工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157956/

相关文章:

c# - 项目的加载程序集

c# - 非异步执行路径能否在 "async"方法中返回同步结果

visual-studio - 如何将数字签名应用于 Visual Studio 项目?

c# - 为什么 visual studio 为程序集重定向创建 app.configs?

c++ - Visual Studio 2012 C++ Windows 32

c# - 我应该为此创建一个单独的类吗?

c# - 如何处理 MVC 中的 2 对 1 关系?

c# - 管理 EntityConnection 生命周期

c# - 获取 boolean 数组中 false 元素的所有索引的最快方法是什么?

c# - 接受空 Lambda 表达式的函数的定义原型(prototype)