我有一个导致设计器异常的函数。如果设计师加载它,我可以避免调用该函数吗?有没有比 try catch 更好的属性或东西?
更多细节:我的意思是 win 表单的视觉工作室设计师。我的表单正在使用一个signleton,它在初始化时调用LoadProject()。现在我想避免设计者调用 LoadProject() 函数。
我有一个导致设计器异常的函数。如果设计师加载它,我可以避免调用该函数吗?有没有比 try catch 更好的属性或东西?
更多细节:我的意思是 win 表单的视觉工作室设计师。我的表单正在使用一个signleton,它在初始化时调用LoadProject()。现在我想避免设计者调用 LoadProject() 函数。
假设这是 WinForms - 您可以检查您当前是否处于 DesignMode 并让您的函数立即返回。
本文全面解释了一些复杂性,包括解决方案。
您可以尝试查看MSDN 上关于使用DesignMode属性的这篇文章。这可能会帮助你。您可以将在 this 中引发异常的代码包装在一个条件中,以避免在设计时使用该代码。
请注意,这在构造函数中不起作用,因为设计者必须实例化对象然后设置属性。
有几种方法可以检测您是否处于设计模式:
devenv.exe
using Application.ExecutablePath.ToLower().IndexOf("devenv.exe")
。如果是,则 Visual Studio 正在实例化控件。有点可怕,但它有效。LicenseManager.UsageMode
该值LicenseUsageMode.Designtime
(有关更多详细信息,请查看我对Detecting design mode from a Control's constructor的回答)。请注意,这在构造函数中确实有效。在任何这些检查中包装对您的函数的调用应该可以解决您的问题。