我仍然是这方面的初学者,我正在努力更好地了解事件以及如何正确使用它们。
我有一个管理器类,它有一个存储一堆对象的容器;每个对象都有一个事件(本质上是说它完成了它所做的事情)。我希望管理器类订阅事件并在事件触发时从容器中删除对象。
当您注册一个对象的事件时,它是否注册了该对象的所有实例,还是特定于实例?
所以这是我正在看的东西:
class MyManager
{
private ConcurrentDictionary<string, MyObject> m_myObjectCollection;
public MyManager()
{
m_myObjectCollection = new ConcurrentDictionary<string, MyObject>();
}
private void RemoveObject(MyObject myObject)
{
//remove object from collection
}
}
class MyObject
{
public delegate void MyObjectFinished_EventHandler(object source, EventArgs e);
public event MyObjectFinished_EventHandler OnFinished;
public MyObject()
{
this.OnFinished += new MyObjectFinished_EventHandler(MyObject_OnFinished);
}
private void MyObject_OnFinished(object source, EventArgs e)
{
//do some clean up stuff
}
private void DoStuff()
{
//do stuff until finished
OnFinished(this, new EventArgs());
}
让管理器类创建 MyObject 的实例然后注册该对象的事件就足够了吗?这对我来说似乎不对;我的直觉告诉我,我只会注册那个对象的事件,而不是那个对象类型的所有实例。
还是我需要在将每个 MyObject 添加到集合时注册它,然后在删除它时取消注册?
还是有更好的方法来完全处理这个问题?