C# 用新表单关闭参数替换过时的关闭事件参数
我们目前正在通过将数据库系统和所有文件(32bit-2005vc#)构建为64位来更新数据库系统和所有文件。我遇到的问题是,当使用this.closing+=new CancelEventArgs(事件名称)进行赋值时,数据泄漏正如同事们所说,我发现它已经过时了,我正在寻找一种切换到使用FormClosing事件的方法 旧代码和事件示例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
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+=并修复编译错误。下一个误解是,我在这里没有看到任何“数据泄漏”,您很少需要-=事件处理程序。我当然不认为有必要这样做。你能澄清其中任何一点吗?我只是不确定我是否理解这个问题。问题已经解决了。在我们的数据库和加载此对话框所属的控件之间发生数据泄漏。我感谢所有的帮助。数据库在加载对话框之前对信息进行了快速扫描,然后将其再次发送。只有一组数据被正确处理。我们解决了这个问题。非常感谢。