我有用于拦截 Windows Mobile 上的通话记录的事件处理程序。该问题更具体到 C# 中的事件处理程序,而不是 windows mobile。我第一次能够附加和分离事件处理程序。问题是:至少在分离一次后,我无法附加事件处理程序。为什么在分离并再次附加后不调用事件处理程序?
下面是我的代码:
private static SystemState stateIncoming = null;
private static SystemState stateOutgoing = null;
private static SystemState stateTalking = null;
public static void StartCallLogInterception()
{
if (stateIncoming == null && stateOutgoing == null && stateTalking == null)
{
stateIncoming = new SystemState(SystemProperty.PhoneIncomingCall);
stateIncoming.Changed += new ChangeEventHandler(stateIncoming_Changed);
stateOutgoing = new SystemState(SystemProperty.PhoneCallCalling);
stateOutgoing.Changed += new ChangeEventHandler(stateOutgoing_Changed);
stateTalking = new SystemState(SystemProperty.PhoneCallTalking);
stateTalking.Changed += new ChangeEventHandler(stateTalking_Changed);
}
}
public static void EndCallLogInterception()
{
if (stateIncoming != null && stateOutgoing != null && stateTalking != null)
{
stateIncoming.Changed -= new ChangeEventHandler(stateIncoming_Changed);
stateIncoming = null;
stateOutgoing.Changed -= new ChangeEventHandler(stateOutgoing_Changed);
stateOutgoing = null;
stateTalking.Changed -= new ChangeEventHandler(stateTalking_Changed);
stateTalking = null;
}
}
编辑:我更新了代码以包含类级别变量。此外,以下答案相互冲突。如果我正在处理对象,我必须在需要附加事件处理程序时重新创建对象。这有意义吗?
编辑2:问题不在于对象或事件处理代码。我正在使用 OpenNETCF 的 LargeIntervalTimer。每当我使用 LargeIntervalTimer 运行计时器时,事件处理程序都没有正确附加。没有 LargeIntervalTimer,一切正常。