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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |