1

我在我的项目中使用FluorineFx 1.0.0.17NetConnection并用于连接到 RTMP 主机(Flash 媒体服务器)。我正在为 PRTG 创建一个 RTMP 监控探针。

在文件的第 173 行主应用程序进程结束时总是出现错误WorkItemsQueue.cs(此处显示的第二个代码行)

// 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);
4

1 回答 1

2

在多线程调试的情况下,Visual Studio 可能会对您撒谎。是不可能的。waitHandles_null

你似乎有一个损坏的堆

细节

当进程试图访问不在其内存空间内的内存位置时,您会遇到访问冲突。这发生在缓冲区溢出,......你的名字。如果您使用非托管代码,这很容易做到。

于 2012-03-20T12:54:20.190 回答