使用“使用”声明

时间:2017-02-20 18:47:07

标签: c# forms dispose using idisposable

在我的学习之旅中,我已经到了Visual Studio抱怨我打开,关闭和处理表单的方式(在我完成之后)。 我这样做的方式; Visual Studio告诉我:

即:“Form1创建IDisposable类型”。

因为我想要做得好;我进一步挖了一点,我已经设法理解了“使用”语句的工作原理和应该如何实现;确保事情得到妥善处理。 我的SQL数据库方法(插入,更新和删除)就像魅力一样工作;其中SqlConnection& SqlCommand在哪里创建IDisposable类型。

根据最近的一些研究:Try,Catch和Finally我应该能够像以下一样完成:“using”语句;但它也会在不使用它的情况下关闭表格。 还有Try,Catch,最后;表单将在不使用它的情况下关闭,Visual Studio将抛出相同的“IDisposable Types”消息。

进一步的说法;在我找到的所有“使用”信息之后;我能够大大提高我的应用程序(和我的编码风格);但我无法想象如何使用表格“使用”...... 我可以创建表单的实例但是我不能保持表单打开,直到我完成它或用户单击“关闭”。 因此,我的问题是:如何正确实施这一点?或者这有可能吗?

使用示例:

private void OpenForm1()
{
   // Create a new instance of Form1
   using (var f1 = new Form1())
   {
      // Some Code Here
   }
   // Form1 Instance Gets Disposed at the End of the Loop Above.
}

我的当前(适度)Open& amp;关闭表单方法:

小注意:我从一个将控制的类中调用此方法:

  • 开放&关闭表格
  • 通过表单传递的数据

    private Form1 f1;
    
    public void OpenForm1(bool _Open, int _LocX, int _LocY)
    {
        try
        {
            switch (_Open)
            {
                case true:
    
                    // Close & Dispose "Form1" (if Opened)
                    if (f1 != null) { OpenForm1(false, 0, 0); }
    
                    // Re-Open Form1 with New Data (if Closed)
                    if (f1 == null) { f1 = new Form1(_LocX, _LocY); }
    
                    f1.Show();
                    break;
    
                case false:
                    if (f1 != null) { f1.Close(); f1.Dispose(); f1 = null; }
                    break;
            }
        }
    
        catch (InvalidOperationException _IOE) { MessageBox.Show(_IOE.Message); }
    }
    

注意:我知道我可以选择使用/制作IDisposable模式(我仍然不明白如何实现它或以实际方式使用它 - Just Theory到目前为止。我的所有尝试都失败了;导致我不堪重负并且质疑这样做是否会被认为是一种好习惯。)

提前致谢。 最诚挚的问候;

1 个答案:

答案 0 :(得分:1)

当您的变量的生命周期结束时,当您的使用区块超出范围时,您只能使用using。您希望表单超出using语句范围之外的位置,因此您不应在using块中使用{。}}。

Form.Close无论如何都会调用Dispose,因此您不必在此处担心,因为表单的关闭将处理资源清理。您必须在表单上致电Dispose的唯一时间是您从未致电Show