如何解决List <CustomObject>:自定义对象如何将自己从列表中删除?
| 我创建了一个类,该类通过一个elapse事件实现一个“ 0”。
private void ElapseEvent(object source,ElapsedEventArgs e){
//read from serial port device
}
在主程序中,我有一个private List<MyTimerClass> _timers
。
我动态启动计时器并将其添加到计时器列表中。
var timer1= new MyTimerClass();
timer1.Execute(\"Device A\");
_timers.Add(timer1);
var timer2= new MyTimerClass();
timer2.Execute(\"Device B\");
_timers.Add(timer2);
当ElapseEvent
遇到错误并且串行端口已断开连接时,我想从列表中删除计时器。我该怎么做?
解决方法
您可以在包含计时器的类上添加OnError方法。为了让父类知道发生错误。类似于以下内容:
在MyTimerClass
public MyTimerClass(Action<MyTimerClass,Exception> onError)
{
this.onError = onError;
}
private void ElapseEvent(object source,ElapsedEventArgs e){
try{
//read from serial port device
}
catch(Exception ex) // It would be better if you know the exceptions you want to handle
{
if(this.onError != null)
{
this.onError(this,ex);
}
}
}
在家长课上:
var timer1= new MyTimerClass(this.OnTimerError);
timer1.Execute(\"Device A\");
_timers.Add(timer1);
var timer2= new MyTimerClass(this.OnTimerError);
timer2.Execute(\"Device B\");
_timers.Add(timer2);
public void OnTimerError(MyTimerClass timer,Exception error)
{
//Log the exception
_timers.Remove(timer);
}
, 如果_timers是静态变量,则在同一类中创建一个静态事件处理程序。当在计时器的“ 4”中引发错误时,请参照自身调用事件处理程序,并让静态事件处理程序从列表中删除错误的计时器。
, 观察者模式。 .NET为此提供了本机支持。
, 您应该签出命令模式;听起来很适合您。