当我创建将在应用程序的不同区域中使用的事件时,我会重复使用下面的代码。我觉得它非常有用,它使事件很容易在代码中遵循。有什么理由说这可能是一个坏主意吗?这有点宽泛,但基本上有理由不这样做吗?
活动类:
public delegate void FocusEventHandler(object source, FocusEventArgs e);
class FocusEvent
{
public static event FocusEventHandler focusEvent;
public static void Focus(bool status)
{
focusEvent(null, new FocusEventArgs(status));
}
}
public class FocusEventArgs : EventArgs
{
public bool Focused { get; set; }
public FocusEventArgs(bool f)
{
Focused = f;
}
}
为了解雇这个事件,我只需要:
FocusEvent.Focus(false);
谢谢你们。这有很大帮助。我真的需要阅读内存使用情况。
答案 0 :(得分:9)
static
事件的最大问题是,您需要非常小心取消订阅。对于实例事件,如果您没有取消订阅,那么您可能最终会将图形的一部分人为地保持活动状态,直到具有事件的对象被释放并且无法访问(使所有订阅者无法访问) - 但是,static
事件永远无法访问。这意味着任何未取消订阅的订阅者永远不会无法访问,并且永远不会被垃圾回收。
答案 1 :(得分:4)
几年前,我参与了一个使用静态事件的大型Windows应用程序。在调查一些内存使用问题时,我发现整个应用程序中的任何表单都没有被垃圾收集。几乎每个表格都订阅了静态事件,但从未取消订阅,导致它们永远存在。
所以,是的,不这样做的主要原因是你不可避免地忘记在某个时候取消订阅事件,导致事情在应用程序的生命周期内停留。