我有 Windows 服务应用程序(没有 winforms)。在 Main 方法中,我启动了计时器。Timer elapsed 事件处理程序正在新线程(?)中运行。有什么简单的方法可以将异常从计时器经过的事件处理程序抛出回主线程吗?
我试图处理处理程序主体中的异常并引发自定义事件,但是当我在引发此事件时重新启动主进程时,现在运行 2 个进程同时执行相同的操作。
如何从定时器事件处理程序线程中获取事件或异常信息返回主线程?
谢谢你。
编辑:
using System;
using System.Security.Permissions;
using System.Timers;
namespace TestingConsoleApplication.Model
{
static class ThreadExceptionTester
{
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
public static void Run()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
Timer Timer = new Timer(1000);
Timer.Elapsed += new ElapsedEventHandler(TimerEventHandler);
Timer.Start();
try
{
throw new Exception("1");
}
catch (Exception e)
{
Console.WriteLine("Catch clause caught : " + e.Message);
}
//throw new Exception("2");
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
}
static void TimerEventHandler(object source, ElapsedEventArgs e)
{
Console.WriteLine("Throwing from timer event handler");
throw new Exception("timer exception");
}
}
}
这写在控制台上:
Catch clause caught : 1
Throwing from timer event handler
然后程序在 throw new Exception("timer exception"); 上出现未处理的异常而崩溃;如果我取消注释 throw new Exception("2"); Exeption 被处理并且在控制台上也是“Catch 子句被捕获:2”。换句话说,计时器异常不是由 MyHandler 处理的。