gpt4 book ai didi

c# - 如何使用 Timer (Thread) 类处理异常

转载 作者:行者123 更新时间:2023-11-30 19:12:55 31 4
gpt4 key购买 nike

我正在尝试处理 Timer 的异常。如果该类具有类似 HandlerExceptionEvent 的内容,那将会很好,这样我们就可以添加一些事件来记录某些内容或停止计时器。

PS:我不想在 ElapsedEventHandler() 中添加 try/catch block 。

class Program
{
static void Main(string[] args) {
System.Timers.Timer t = new System.Timers.Timer(1000);
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
t.Start();

System.Threading.Thread.Sleep(10000);
t.Stop();
Console.WriteLine("\nDone.");
Console.ReadLine();
}

static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
Console.WriteLine("Ping!");
throw new Exception("Error!");
}
}

最佳答案

PS: I don't want to add "try/catch Exception" inside ElapsedEventHandler()

既然 Timer 类不支持这样的事件,否则您将如何捕获异常?

如果您坚持使用 Timer 类,那么也许这是您唯一的选择:

var t = new System.Timers.Timer(1000);
t.Elapsed += (sender, e) => {
try
{
t_Elapsed(sender, e);
}
catch (Exception ex)
{
// Error handling here...
}
};

这样,实际处理程序 t_Elapsed 不包含任何错误处理,您可以为 Timer 类创建一个包装类,隐藏此实现细节,进而提供一个事件以进行异常处理。

这是一种方法:

class ExceptionHandlingTimer
{
public event Action<Exception> Error;

System.Timers.Timer t;

public ExceptionHandlingTimer(double interval)
{
t = new System.Timers.Timer(interval);
}

public void Start()
{
t.Start();
}

public void AddElapsedEventHandler(ElapsedEventHandler handler)
{
t.Elapsed += (sender, e) =>
{
try
{
handler(sender, e);
}
catch (Exception ex)
{
if (Error != null)
{
Error(ex);
}
else
{
throw;
}
}
};
}
}

关于c# - 如何使用 Timer (Thread) 类处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406904/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com