c# - System.Threading.ThreadStateException(可能是引发条件)
问题描述
首先,我想描述一下我的问题所涉及的类/方法的一般结构。我有一个应该循环启动线程的类。该线程处理将日志条目写入日志文件的函数。我通过计时器 ( System.Threading.Timer
) 实现了这一点。此外,还有一个 ThreadHandler 类,它将所有线程保存在一个列表中。这些线程由线程名称的标准函数控制System.Threading.Thread
。现在到受我的问题影响的代码:
在我的 Log 类 ( LogWriter
) 的构造函数中,我调用了该方法InitializeLoggerThread()
:
private void InitializeLoggerThread()
{
LoggerLoggingThread = new System.Threading.Thread(new System.Threading.ThreadStart(WriteLog));
LoggerLoggingThread.Name = LoggerLogginThreadName;
ObjectObserver.ThreadHandler.AddThread(LoggerLoggingThread); // Obersver class from which all objects can be accessed
}
计时器本身将启动
public void StartLogging()
{
this.LoggerTimer = new System.Threading.Timer(LoggerCallback, null, 1000, LoggerInterval);
}
此外,Log 类包含计时器的实现:
private const int LoggerInterval = 5000;
private System.Threading.Thread LoggerLoggingThread;
private static void LoggerCallback(object state)
{
if ((BufferCount > 0))
{
ObjectObserver.ThreadHandler.StartThread(LoggerLogginThreadName);
}
}
将ThreadHandler
使用以下函数启动线程:
public void StartThread(string threadName)
{
lock (Locker)
{
if (GetThread(threadName).ThreadState == ThreadState.Stopped || GetThread(threadName).ThreadState == ThreadState.Unstarted)
{
GetThread(threadName).Start();
}
}
}
我已经检查了参数等。在这种情况下一切都是正确的。基本上,在调试时,似乎所有线程都尝试同时启动记录器线程。
线程将通过它的名字被调用,函数如下:
public Thread GetThread(string threadName)
{
foreach (Thread thread in Threads)
{
if (thread.Name == threadName)
{
return thread;
}
}
return null;
}
现在我的问题是:我得到的构造中的错误是什么
System.Threading.ThreadStateException 在 StartThread(...)
在第一次执行后多次尝试执行?
如果需要,我可以提供所有重要功能的复制和粘贴代码以进行调试。
解决方案
推荐阅读
- javascript - 如何将'__extends = function(){}'重写为对象
- c++ - 将数字转换为填充字符串
- c++ - 动态类的分段错误(作业问题)
- django - Django:将上下文传递给另一个视图
- nginx - 删除 Content-Type 标头中的字符集
- gunicorn - “首先使用 sudo 权限为 Gunicorn 创建和打开一个 systemd 套接字文件”(此文件的目录*似乎*不存在)
- r - 如何让 albine() 被识别为 Rstudio 中的函数?
- javascript - Intl.NumberFormat String 数字前的货币
- java - Java - 如何在具有良好鼠标位置的缩放操作后居中渲染
- ansible - 测试列表中具有特殊字符的子字符串