我有一个对象启动一个线程,打开一个文件,并等待其他类的输入.当它接收输入时,它将其写入磁盘.基本上这是一个线程安全的数据记录类…
这是奇怪的部分.当我在设计器(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