【发布时间】:2011-05-27 04:13:24
【问题描述】:
我正在尝试构建一个小型电子邮件工作者来发送我的电子邮件。电子邮件工作者在自己的线程中运行。 global.asax 启动线程,然后在抛出此异常之前运行一轮。我一直在试图找出它把它扔到哪里,但似乎每次都不一样。记录被打印到文本文件中以便工作,也许是处置功能?
这是抛出的异常:
在电子邮件中开始新一轮 工人 for 循环
去睡在 电子邮件工作者 for 循环
第一次机会 类型异常 'System.Threading.ThreadAbortException' 发生在 mscorlib.dll
一个例外 类型 'System.Threading.ThreadAbortException' 在 mscorlib.dll 中发生但不是 在用户代码中处理
这是 EmailWorker 的代码
public static class EmailWorker
{
public static void Work()
{
TimeSpan sleepTime = new TimeSpan(0, 1, 0);
for (; ; )
{
Debug.WriteLine("Starting a new round in the email worker for-loop");
try
{
// Get the records
CS_Code.UtopiaDataContext db = new CS_Code.UtopiaDataContext();
List<CS_Code.Global_Email> emailsToSend = (from xx in db.Global_Emails select xx).ToList();
// Write the records to a file (for now)
TextWriter writer = new StreamWriter(@"test.txt", true); // For debugging
foreach (var email in emailsToSend)
writer.WriteLine("To: " + email.Email_Address + ", Subject: " + email.Subject + ", uid:" + email.UserName.ToString());
writer.Close();
writer.Dispose();
// Delete the used records from the database
foreach (var email in emailsToSend)
db.Global_Emails.DeleteOnSubmit(email);
db.SubmitChanges();
db.Dispose();
Debug.WriteLine("Going to sleep in the email worker for-loop");
Thread.Sleep(sleepTime); // Sleep for 1 minute.
Debug.WriteLine("Just woke up in the email worker for-loop");
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
break;
}
}
}
}
这是启动一切的 global.asax 文件:
private static Thread EmailWorkerThread { get; set; }
void Application_Start(object sender, EventArgs e)
{
// Email worker thread
if ((EmailWorkerThread == null) || (!EmailWorkerThread.IsAlive))
{
ThreadStart ts = new ThreadStart(EmailWorker.Work);
EmailWorkerThread = new Thread(ts);
EmailWorkerThread.Start();
}
}
void Application_End(object sender, EventArgs e)
{
// Email worker thread
if ((EmailWorkerThread != null) || (EmailWorkerThread.IsAlive))
EmailWorkerThread.Abort();
EmailWorkerThread = null;
}
【问题讨论】:
标签: c# asp.net multithreading global-asax threadabortexception