Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在设计器中打开UserControl时VisualStudio中出错_C#_Visual Studio 2008_Visual Studio Designer - Fatal编程技术网

C# 在设计器中打开UserControl时VisualStudio中出错

C# 在设计器中打开UserControl时VisualStudio中出错,c#,visual-studio-2008,visual-studio-designer,C#,Visual Studio 2008,Visual Studio Designer,背景: 我已经创建了这个用户控件。在用户控件的构造函数中,我调用了一个函数,该函数从数据库中检索一些值。如果在检索值时发生错误,将显示一个解释错误的消息框。到目前为止还不错 问题: 我创建了一个表单,其中包括我的UserControl。现在,当我打开这个表单(甚至UserControl本身)时,会调用构造函数(我认为这样可以准确地绘制它),并且,由于数据库不可用,因此会显示messagebox(如上所述) 如何防止这种情况发生 我只想说清楚:代码在运行时非常有效。一切都按计划进行。只有在Visu

背景: 我已经创建了这个用户控件。在用户控件的构造函数中,我调用了一个函数,该函数从数据库中检索一些值。如果在检索值时发生错误,将显示一个解释错误的消息框。到目前为止还不错

问题: 我创建了一个表单,其中包括我的UserControl。现在,当我打开这个表单(甚至UserControl本身)时,会调用构造函数(我认为这样可以准确地绘制它),并且,由于数据库不可用,因此会显示messagebox(如上所述)

如何防止这种情况发生


我只想说清楚:代码在运行时非常有效。一切都按计划进行。只有在VisualStudio的Designer视图(如果有必要的话,2008 SP1)中才会出现问题。然而,在Designer中,这很糟糕,尤其是现在当连接失败时应用程序试图重新连接时。每次我进入设计器模式时,我的Visual Studio都会冻结大约20秒(重新连接超时),这会扼杀我的工作进程。

我通过在程序类上使用名为IsRunning的全局静态属性来解决这个问题

当我的程序在main方法中启动时,我将IsRunning属性设置为true。然后在我的用户控件的构造函数中,我可以轮询正在运行的属性,以确定我是否执行特定的代码,在您的情况下,这些代码将尝试访问数据库

编辑: 这里有一些代码

private static bool _running = false;

    /// <summary>
    /// Gets or sets a value indicating whether this <see cref="Program"/> is running.
    /// This property is used for design time WSOD issues and is used instead of the 
    /// DesignMode property of a control as the DesignMode property has been said to be
    /// unreliable.
    /// </summary>
    /// <value><c>true</c> if running; otherwise, <c>false</c>.</value>
    public static bool Running
    {
        get
        {
            return _running;
        }
    }


    static void Main(string[] args)
    {
        Initialize();


        _running = true;

我通过在我的程序类上有一个名为IsRunning的全局静态属性来解决这个问题

当我的程序在main方法中启动时,我将IsRunning属性设置为true。然后在我的用户控件的构造函数中,我可以轮询正在运行的属性,以确定我是否执行特定的代码,在您的情况下,这些代码将尝试访问数据库

编辑: 这里有一些代码

private static bool _running = false;

    /// <summary>
    /// Gets or sets a value indicating whether this <see cref="Program"/> is running.
    /// This property is used for design time WSOD issues and is used instead of the 
    /// DesignMode property of a control as the DesignMode property has been said to be
    /// unreliable.
    /// </summary>
    /// <value><c>true</c> if running; otherwise, <c>false</c>.</value>
    public static bool Running
    {
        get
        {
            return _running;
        }
    }


    static void Main(string[] args)
    {
        Initialize();


        _running = true;

您可以检查控件是否以设计模式显示:


/编辑:正如人们在对另一个答案的评论中指出的,DesignMode属性在构造函数中不可用。因此,最好的解决方案可能是将数据库内容移动到类似“Load”的事件中,并在其中使用DesignMode属性。

您可以检查控件是否以设计模式显示:


/编辑:正如人们在对另一个答案的评论中指出的,DesignMode属性在构造函数中不可用。因此,最好的解决方案可能是将数据库内容移动到类似“Load”的事件中,并在其中使用DesignMode属性。

您为什么不使用“DesignMode”属性?相反,处理Load事件,将代码移动到其中并检查DesignMode属性。比紧密耦合的全局变量更好的解决方案。我已经有一段时间没有考虑这个问题了,但是我觉得设计模式有点奇怪,所以我只想用一种简单(没有魔力)的方法来控制自己。我不是100%,但我认为直到构造函数激发之后,才在控件上设置DesignMode属性。DesignMode属性并不不可靠。。。你不能在构造函数中检查它。想想看:VS设计器将实例化您的表单类,然后在下一行代码中,它将设置DesignMode=true。回顾我是如何使用上述方法的,这无疑是一个错误,因为当时我没有考虑为什么它会这样工作。感谢您为我澄清。您为什么不使用“DesignMode”属性?请处理加载事件,将代码移到其中,然后检查DesignMode属性。比紧密耦合的全局变量更好的解决方案。我已经有一段时间没有考虑这个问题了,但是我觉得设计模式有点奇怪,所以我只想用一种简单(没有魔力)的方法来控制自己。我不是100%,但我认为直到构造函数激发之后,才在控件上设置DesignMode属性。DesignMode属性并不不可靠。。。你不能在构造函数中检查它。想想看:VS设计器将实例化您的表单类,然后在下一行代码中,它将设置DesignMode=true。回顾我是如何使用上述方法的,这无疑是一个错误,因为当时我没有考虑为什么它会这样工作。谢谢你让我直截了当。我同意这将是一个比全局变量更一般的解决方案,但我仍然接受wilpeck的答案,因为它对我的情况更有帮助。我在一个单独的类中有所有错误报告的内容,现在我只检查该类中的全局变量,而不是在每个控件中进行检查。我同意这将是一个比全局变量更通用的解决方案,但是我仍然接受wilpeck的答案,因为它对我的情况更有用。我在一个单独的类中有所有错误报告的内容,现在我只检查该类中的全局变量,而不是在每个控件中进行检查。