【发布时间】:2013-03-12 19:35:12
【问题描述】:
在下面的程序中...
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 实例的引用,所以我可以不引用它。我在调试时没有遇到任何问题。但是现在我担心当应用程序长时间运行并且垃圾收集器更加活跃时,部署后可能会出现问题。
【问题讨论】:
-
查看这篇文章 stackoverflow.com/questions/4526829/… 以获得深入的解释