List <customobject>:自定义对象如何从列表中删除自身?</customobject>

时间:2011-06-25 00:20:37

标签: c# generic-list

我创建了一个实现带有elapse事件的System.Timers.Timer的类。


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遇到错误并且串口断开连接时,我想从列表中删除计时器。我怎么可能这样做?

4 个答案:

答案 0 :(得分:2)

您可以在包含计时器的类中添加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);
}

答案 1 :(得分:1)

如果_timers是静态变量,则在同一个类中创建静态事件处理程序。当在计时器的ElapseEvent中抛出错误时,调用事件处理程序并引用自身,并让静态事件处理程序从列表中删除错误的计时器。

答案 2 :(得分:1)

答案 3 :(得分:0)

你应该查看Command Pattern;听起来对你来说是完美的。