【发布时间】:2012-03-20 12:49:13
【问题描述】:
我在我的项目中使用 FluorineFx 1.0.0.17 并使用 NetConnection 连接到 RTMP 主机(Flash 媒体服务器)。我正在为 PRTG 创建一个 RTMP 监控探针。
在WorkItemsQueue.cs 文件的第 173 行(此处显示第二个代码行)在主应用程序进程结束时始终存在错误
// Prepare array of wait handle for the WaitHandle.WaitAny()
WaitHandle [] waitHandles = new WaitHandle [] { WaitEntry.WaitHandle, cancelEvent };
// Wait for available resource, cancel event, or timeout.
int index = WaitHandle.WaitAny(waitHandles, millisecondsTimeout, true);
这是调试器显示给我的:
调用栈:
[In a sleep, wait, or join]
[External Code]
FluorineFx.dll!FluorineFx.Threading.WorkItemsQueue.DequeueWorkItem(int millisecondsTimeout, System.Threading.WaitHandle cancelEvent) Line 173 + 0xd bytes C#
FluorineFx.dll!FluorineFx.Threading.ThreadPoolEx.Dequeue() Line 329 + 0x2c bytes C#
FluorineFx.dll!FluorineFx.Threading.ThreadPoolEx.ProcessQueuedItems() Line 378 + 0x8 bytes C#
[External Code]
kernel32.dll!749c3677()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!770e9f42()
ntdll.dll!770e9f15()
在进程结束时我的意思是整个程序按应有的方式工作,但是在 Main 方法结束时调试器抛出这个非托管代码错误(仅在 启用非托管时显示代码调试已启用)。
我不知道如何调试,也不知道如何避免。任何帮助将不胜感激。
更新 1:
主线程停止于:
Environment.Exit(0);
【问题讨论】:
-
顺便说一句,您的调用堆栈用于错误的线程。 IOW 没有人抛出异常。
-
@leppie 这是堆损坏。调试不会显示正确的结果。
-
@Aliostad:堆损坏是一个相当模糊的“原因”。 (也许我对一个纯粹的管理世界很无知;p)
-
@leppie 这是访问冲突,即进程试图访问不在其内存空间内的内存位置。缓冲区溢出时会发生这种情况,......你的名字。
-
@Aliostad:啊,我现在明白了。相同错误代码的消息中的细微差别。 :)
标签: c# multithreading waithandle fluorinefx prtg