目前我正在构建一个自定义按钮处理程序(我需要将 kinect 集成到也使用鼠标的按钮系统中)然后我遇到了一个可怕的事情,称为事件处理.. 至少一个小时对我大喊大叫个人电脑:P。我想知道,在我去改变我的系统以允许我的新需求之前,我想知道每个处理程序有多个事件,这是我要尝试工作的方式(我会尝试,但是我要下班过夜,所以我希望明天启动计算机时可以节省一些时间,如果我的系统不是为它设计的,请不要尝试)
另外,我在编码之前看到了一个 getInvoc 列表或类似的东西。我会在上面添加多个代表,然后获取该列表并对其进行迭代吗?
在之前的示例中,我看到人们使用的地方:
public event EventHandler myEventHandler;
我不得不使用:
private Dictionary<BtnEvent, Delegate> m_events;
然后他们做了以下添加处理程序(他们的方式,不是我的):
myObj.myEventHandler += delegate(object sender, EventArgs ea)
{
//do stuff on event
};
首先..如果他们运行两次,一次使用 funcA,第二次使用 funcb 会同时运行吗?还是只有一个?
其次,如果我将 += 的逻辑应用于委托,它会起作用吗?(我必须使用 Delegate,因为我将处理程序存储在字典中,这允许通过使用枚举对处理程序进行逻辑访问)
(我的代码)
private Dictionary<BtnEvent, Delegate> m_events;
//....
m_events = new Dictionary<BtnEvent, Delegate>(6);
m_events.Add(BtnEvent.CLICK_ENTER, null);
m_events.Add(BtnEvent.CLICK_LEAVE, null);
m_events.Add(BtnEvent.CLICK_STAY, null);
m_events.Add(BtnEvent.HOVER_ENTER, null);
m_events.Add(BtnEvent.HOVER_LEAVE, null);
m_events.Add(BtnEvent.HOVER_STAY, null);
//....
public bool addHandle(BtnEvent stateToGet, Delegate function)
{
bool success = false;
if(m_events.ContainsKey(stateToGet))
{
m_events[stateToGet] = function;
}
return(success);
}
// CHANGE ABOVE TO:
public bool addHandle(BtnEvent stateToGet, Delegate function)
{
bool success = false;
if(m_events.ContainsKey(stateToGet))
{
m_events[stateToGet] += function;
}
return(success);
}
将改变 m_events[stateToGet] = function; 到 m_events[stateToGet] += 函数;允许我通过以下代码调用多个事件句柄(我传递给 addHandle 的函数)?
private void ExecuteEvent(BtnEvent currEvent)
{
if(m_events.ContainsKey(currEvent))
{
if(m_events[currEvent] != null)
{
m_events[currEvent].DynamicInvoke(null);
}
}
}