也许这对我来说是一个愚蠢的错误,但我无法弄清楚。C#线程:在不正确的对象上执行的线程
所以这种情况是我每200毫秒从数据库中检索一条记录,如果有可用的话。 在每条记录上,我开始一个线程。 在这种情况下,它是发送的邮件。
QMail mailRecord;
while (!stopSending)
{
if (QueueMailingHandler.m_numActive >= MaxThreads)
{
Thread.Sleep(2000);
continue;
}
mailRecord = QMail.Next();
if (mailRecord.UID > 0)
{
QueueMailingHandler.m_numActive++;
QueueMailingHandler MailingHandler = new QueueMailingHandler();
mailRecord.Processing = true;
MailingHandler.Start(mailRecord);
}
Thread.Sleep(200);
}
我MailingHandler:
internal QueueMailingHandler()
{
}
internal void Start(QMail rec)
{
record = rec;
Thread thread = new Thread(new ThreadStart(ProcessThread));
thread.IsBackground = true;
thread.Start();
}
public void ProcessThread()
{
_logging = new AutoQueueLog(record.UID.ToString(), "Sending Mails", record.Subject, "Processing");
_logging.Path = @"C:\Windows Services\QueueMailing\AutoLog";
_logging.LogMessage();
try
{
SendMail(record);
record.SetDone();
_logging.State = "Done";
_logging.LogMessage();
}
catch (Exception ex)
{
_logging.State = "Error";
_logging.LogException = ex;
_logging.Level = AutoLog.ExceptionLevel.Major;
_logging.LogMessage();
}
finally
{
m_numActive--;
}
}
而作为loggingresult,我得到这个:
6/16/2015 11:57:02 AM - [328] - Function : QueueMailingHandler.ProcessThread() - Processing
6/16/2015 11:57:02 AM - [329] - Function : QueueMailingHandler.ProcessThread() - Processing
6/16/2015 11:57:02 AM - [329] - Function : QueueMailingHandler.ProcessThread() - Done
6/16/2015 11:57:02 AM - [330] - Function : QueueMailingHandler.ProcessThread() - Done
6/16/2015 11:57:02 AM - [330] - Function : QueueMailingHandler.ProcessThread() - Processing
6/16/2015 11:57:02 AM - [331] - Function : QueueMailingHandler.ProcessThread() - Processing
6/16/2015 11:57:02 AM - [331] - Function : QueueMailingHandler.ProcessThread() - Done
6/16/2015 11:57:03 AM - [332] - Function : QueueMailingHandler.ProcessThread() - Processing
6/16/2015 11:57:03 AM - [333] - Function : QueueMailingHandler.ProcessThread() - Processing
6/16/2015 11:57:03 AM - [333] - Function : QueueMailingHandler.ProcessThread() - Done
6/16/2015 11:57:03 AM - [333] - Function : QueueMailingHandler.ProcessThread() - Done
6/16/2015 11:57:03 AM - [333] - Function : QueueMailingHandler.ProcessThread() - Done
的问题是:为什么使用,应该在一个单独的对象(但我的主题相似)线程?
任何帮助,欢迎。由于
所以你的问题是什么? –
我很乐意提供帮助,但您的问题到底是什么? –
我几乎可以肯定,错误在你的'record = rec'行中。你想复制你的对象,但你只需复制一个引用到原来的引用,所以下一个'record = rec;'会覆盖最后一个。你可以尝试在'rec'上调用copy contructor吗? – mg30rg