加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:00:05 所属栏目:百科 来源:网络整理
导读:我有一个对象启动一个线程,打开一个文件,并等待其他类的输入.当它接收输入时,它将其写入磁盘.基本上这是一个线程安全的数据记录类… 这是奇怪的部分.当我在设计器(Visual Studio 2008)中打开一个表单时,使用该文件创建的对象.这显然是在设计时运行vhost进程
我有一个对象启动一个线程,打开一个文件,并等待其他类的输入.当它接收输入时,它将其写入磁盘.基本上这是一个线程安全的数据记录类…

这是奇怪的部分.当我在设计器(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读