C# 用新表单关闭参数替换过时的关闭事件参数

C# 用新表单关闭参数替换过时的关闭事件参数,c#,visual-studio-2012,user-controls,event-handling,formclosing,C#,Visual Studio 2012,User Controls,Event Handling,Formclosing,我们目前正在通过将数据库系统和所有文件(32bit-2005vc#)构建为64位来更新数据库系统和所有文件。我遇到的问题是,当使用this.closing+=new CancelEventArgs(事件名称)进行赋值时,数据泄漏正如同事们所说,我发现它已经过时了,我正在寻找一种切换到使用FormClosing事件的方法 旧代码和事件示例 this.Closing += new CancelEventHandler(AssignUsers_Closing); private void Ass

我们目前正在通过将数据库系统和所有文件(32bit-2005vc#)构建为64位来更新数据库系统和所有文件。我遇到的问题是,当使用this.closing+=new CancelEventArgs(事件名称)进行赋值时,数据泄漏正如同事们所说,我发现它已经过时了,我正在寻找一种切换到使用FormClosing事件的方法

旧代码和事件示例

this.Closing += new CancelEventHandler(AssignUsers_Closing);


private void AssignUsers_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    try
    {
        "some event"

    }
    catch (Exception ex)
    {
        ShowException se = new ShowException();
        se.ShowDialog(ex);
    }
}
这就是我想转换为FormClosing事件的地方,这样windows就可以为我处理数据泄漏,而不必为每个类似这样的事件向.dispose()函数添加-=语句

创意/新代码

private void AssignUserForm_FormClosing(object sender, FormClosingEventArgs e)
{
    try
    {
        *code*
        // Use e.cancel to test whether to close the form or not.
    }
    catch (Exception ex)
    {
        ShowException se = new ShowException();
        se.ShowDialog(ex);
    }
}
这将是一个可行的选择。有没有关于如何进行这种改变的建议

编辑:更好地概述我的问题

更改此选项:

public AssignUserForm()
        {
            InitializeComponent();
            InitMe();

            try
            {
                Database.ApplyFieldSecurity(this);
            }

            catch { }
        }

        private void InitMe()
        {
            try
            {
                this.Closing += new CancelEventHandler(AssignUsers_Closing);

                // Get the users from the system


               //Binding happens

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

将其转换为可以使用Windows事件创建FormClosing事件的功能。

问题已经解决。在我们的数据库和加载此对话框所属的控件之间发生数据泄漏。我感谢所有的帮助。数据库在加载对话框之前对信息进行了快速扫描,然后将其再次发送。只有一组数据被正确处理。我们解决了这个问题。谢谢

为什么你认为这里有内存泄漏?您是否进行过测试或有任何参考资料?我的理解是,由于您的事件处理程序都在表单内部,GC仍然会销毁所有内容(假设没有对表单的外部引用)。这恰好是一个对话框表单,它允许我们将用户分配给XTTML处理单元。这是我能找到的最简单的语句,因为try语句中没有代码。发生数据泄漏是因为每当用户/员工点击取消此表单的按钮时都会创建此事件。它永远不会被处理掉。否则我可能不明白你的意思。这里有一些误解。首先,FormClosing只是对Closing的替换。几乎一样。你根本不需要改变你的代码。只需更改此项。正在关闭+=。。。使用this.FormClosing+=并修复编译错误。下一个误解是,我在这里没有看到任何“数据泄漏”,您很少需要-=事件处理程序。我当然不认为有必要这样做。你能澄清其中任何一点吗?我只是不确定我是否理解这个问题。问题已经解决了。在我们的数据库和加载此对话框所属的控件之间发生数据泄漏。我感谢所有的帮助。数据库在加载对话框之前对信息进行了快速扫描,然后将其再次发送。只有一组数据被正确处理。我们解决了这个问题。非常感谢。