c# – .NET Windows窗体设计时间规则

前端之家收集整理的这篇文章主要介绍了c# – .NET Windows窗体设计时间规则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个对象启动一个线程,打开一个文件,并等待其他类的输入.当它接收输入时,它将其写入磁盘.基本上这是一个线程安全的数据记录类…

这是奇怪的部分.当我在设计器(Visual Studio 2008)中打开一个表单时,使用该文件创建的对象.这显然是在设计时运行vhost进程…

奇怪的是,我还没有在另一个项目中重现这个问题.我不知道在设计器中执行的代码和没有的代码的规则是什么.例如,在Windows窗体构造函数中创建文件实际上并不会在设计时创建文件

有什么解释?有参考吗?

解决方法

您可以检查LicenseManager的UsageMode,以检查代码是否在设计时间.

System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime

这是一个快速的例子:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace Test
{
    public class ComponentClass : Component
    {
        public ComponentClass()
        {
            MessageBox.Show("Runtime!");
        }
    }
}

当这个组件在设计器中添加到您的表单中时,您将立即获取一个消息框.

为了防止这种情况,您可以添加一个简单的if语句来检查代码是否不在设计时

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace Test
{
    public class ComponentClass : Component
    {
        public ComponentClass()
        {
            if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
            {
                MessageBox.Show("Runtime!");
            }
        }
    }
}

添加if语句后,通过设计器将组件添加到表单时,消息框不再显示.

我希望这有帮助.

-jeremy

猜你在找的C#相关文章