Как новый WaitHandle [] может вернуть ноль?Или это? - PullRequest
1 голос
/ 20 марта 2012

Я использую FluorineFx 1.0.0.17 в своем проекте и работаю с NetConnection для подключения к RTMP-хосту (Flash Media Server). Я создаю контрольный датчик RTMP для PRTG.

Всегда есть ошибка в конце основного процесса приложения в строке 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);

Вот что показывает мне отладчик:

enter image description here

Стек вызовов:

[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 отладчик выдает эту ошибку неуправляемого кода (отображается, только если Включить неуправляемый код отладка включена).

enter image description here

Я понятия не имею, как отладить это, или как избежать этого. Любая помощь будет оценена.

ОБНОВЛЕНИЕ 1:

enter image description here

Основные темы останавливается на:

 Environment.Exit(0);

1 Ответ

2 голосов
/ 20 марта 2012

Visual Studio может лгать вам в случае многопоточной отладки. не возможно для waitHandles быть null.

Вы, похоже, имеете поврежденную кучу .

Detail

Вы получаете нарушение прав доступа, когда процесс пытается получить доступ к области памяти, находящейся вне ее области памяти.Это происходит с переполнением буфера, ... вы называете это.Если вы используете неуправляемый код, это легко сделать.

...