【问题标题】:How could new WaitHandle [] return null? Or does it?new WaitHandle [] 怎么可能返回 null?或者是吗?
【发布时间】: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


【解决方案1】:

在多线程调试的情况下,Visual Studio 可能会对您撒谎。 waitHandles不可能成为null

您似乎有一个损坏的堆

详情

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

【讨论】:

  • 那我该怎么办?如何调试它?我很乐意解决错误,因为它是在程序结束之后。
  • 您的堆已损坏。非托管代码中的某些内容正在破坏您的堆。发现这一点不容易
  • 我正在使用 FluorineFx 库,我的代码大概有 20 行。所以看来我应该联系 FluorineFx 支持。 (我正在添加线程调试截图)
  • 是的,我会说如果你已经付钱了,你就付钱。它可能需要一些清理代码才能完成,这就是您所缺少的。
  • 感谢@Aliostad,但是对 FluorineFx 的支持有点慢(据我了解,整个 FluorineFx 是一项人工工作),因此我将研究替代 RTMP C# 客户端库。
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多