Как предотвратить это исключение: значение не попадает в ожидаемый диапазон. с методом WaitHandle.WaitAny?

Исключение в QueueCompareProcessThread() Сообщение: Значение не попадает в ожидаемый диапазон. Трассировка: в System.Threading.WaitHandle.WaitMultiple(WaitHandle[] waitHandles, Int32 миллисекундыTimeout, логическое значение exitContext, логическое значение WaitAll) в System.Threading.WaitHandle.WaitAny(WaitHandle[] ожиданиеHandles, Int32 миллисекундыTimeout, логическое значение exitContext) в System.Threading. WaitHandle.WaitAny(WaitHandle[] ожиданиеHandles)

Я получаю указанное выше исключение, когда использую метод WaitAny для WaitHandle в потоке. Пожалуйста, помогите мне разобраться в проблеме. Вот моя часть кода:

public void QueueCompareProcessThread(QueueProcesses Qp)
{
    try
    {
        WaitHandle[] pHandles = Qp.GetRunningProcessesHandles();
        WaitHandle.WaitAny(pHandles);
        Qp.RemoveExitedProcess();   // clearing the process list 
        // strange behavior is while clearing the process list i'm getting the exception in the thread Waitany method
        // Does Waitany method still working after it returns?
    }
    catch (Exception e)
    {
        utils.Log("QProc Exception at QueueCompareProcessThread() Message:" + e.Message + " Trace:" + e.StackTrace);
    }
}

Может ли кто-нибудь дать некоторое представление о методе WaitAny и помочь мне разобраться с проблемой?


person Prasaath Brave    schedule 26.07.2016    source источник
comment
Очень помогает, если вы регистрируете ex.ToString() вместо того, чтобы регистрировать только сообщение и трассировку стека. В настоящее время в вашем журнале отсутствует тип исключения. Если вы знаете тип исключения, вы можете найти его в документация в чем проблема.   -  person Dirk Vollmar    schedule 26.07.2016


Ответы (1)


Вы должны убедиться, что массив pHandles действительно содержит элементы и что каждый элемент содержится только один раз. В документации указано, что выдается ArgumentException если «waitHandles — это массив без элементов, а версия .NET Framework — 2.0 или более поздняя».

if (pHandles.Any())
{
    WaitHandle.WaitAny(pHandles);
}
person Dirk Vollmar    schedule 26.07.2016