C# 创建EventHandler并侦听另一个类中的事件
我已经创建了如下所示的事件,希望在触发时侦听它并在另一个类中执行方法 但是saveEvent总是为null,并且不会触发 我不知道我错过了什么 这是我的第一堂课C# 创建EventHandler并侦听另一个类中的事件,c#,C#,我已经创建了如下所示的事件,希望在触发时侦听它并在另一个类中执行方法 但是saveEvent总是为null,并且不会触发 我不知道我错过了什么 这是我的第一堂课 internal partial class OpenSaveReportWizardForm : Form { public event EventHandler saveEvent; private void saveButton_Click(object sender, EventArgs e) { saveEvent?.In
internal partial class OpenSaveReportWizardForm : Form
{
public event EventHandler saveEvent;
private void saveButton_Click(object sender, EventArgs e)
{
saveEvent?.Invoke(this, e);
}
}
这是第二节课,我想听听saveEvent
internal class Database
{
public Database()
{
Program._wizardForm.saveEvent += (sender, e) => HandleSaveMethod( );
}
public void HandleSaveMethod()
{
// do something
}
这是我打开表格的地方
internal class Program
{
public static OpenSaveReportWizardForm _wizardForm;
private static void Main()
{
OpenFileCommandHandler();
}
void OpenFileCommandHandler()
{
_wizardForm = new OpenSaveReportWizardForm( );
_wizardForm.ShowDialog();
}
}
因为您处理了wizardForm,所以在该事件被清除之后。 您应该编写下一个代码:
internal class Database
{
private bool _isDisposed;
private OpenSaveReportWizardForm _wizardForm;
public Database()
{
_wizardForm = new OpenSaveReportWizardForm(m_Opening,m_ConnectionProperties,m_ColumnProperties))
_wizardForm.saveEvent += (sender, e) => HandleSaveMethod( );
}
public void HandleSaveMethod()
{
// do something
}
public void Dispose()
{
if(_isDisposed)
return;
_isDisposed = true;
_wizardForm.saveEvent -= HandleSaveMethod;
_wizardForm.Dispose();
}
因为一旦using块退出,当我在saveButton上使用debugger时,saveEvent属性将被清除,因此saveEvent最终不会触发,因为您甚至不显示表单,我猜测您正在程序的其他地方打开表单,但希望它与您在
数据库中创建的实例相同。即使您修复了代码,使其不会立即处置
,除非引用打开的同一个实例,否则您将无法得到所需的结果。我认为您是对的,因为我是从另一个类中打开表单的,而不是从上述两个类中打开表单的,所以我应该从该实例中获取ref并在Db类中使用它吗?编译器没有到达Db类,因为单击事件保存事件为null