在以下程序中...
using System;
class Program
{
static Parent parent;
static void Main( string[] args )
{
parent = new Parent();
// The program hereafter runs for a long time and occasionally
// causes parent.SomeEvent to be raised.
}
}
class Parent
{
public event EventHandler SomeEvent;
public Parent()
{
new Handler( this );
}
}
class Handler
{
public Handler( Parent parent )
{
parent.SomeEvent += parent_SomeEvent;
}
void parent_SomeEvent( object sender, EventArgs e )
{
// Does something important here.
}
}
请注意,实例化的Handler
对象没有被引用,尽管它已经订阅了SomeEvent
. 是否有可能,在程序运行一段时间后,垃圾收集器可能会决定消除该Handler
实例,parent_SomeEvent
因此无论何时引发其处理程序都将不再被调用parent.SomeEvent
?
我需要对我正在编写的应用程序进行澄清。Handler
如上所示,有许多类似的对象被实例化,而没有被引用。的中心目的Handler
是订阅SomeEvent
. 没有有用的方法来调用对Handler
实例的引用,所以我可以不引用它。我在调试时没有遇到任何问题。但是现在我担心当应用程序长时间运行并且垃圾收集器更加活跃时,部署后可能会出现问题。