Диагностика ObjectDisposedException «Безопасный дескриптор закрыт» - PullRequest
14 голосов
/ 17 декабря 2010

У меня есть приложение C #, которое отправляет исключение ObjectDisposedException с сообщением

Безопасный дескриптор закрыт

Это происходит, как только я запускаю приложение.

К сожалению, трассировка стека действительно бесполезна (см. Ниже).Есть ли способ для меня, чтобы определить, какой вызов был предпринят здесь асинхронно?

Действительно ли DoAsyncCall () подразумевает вызов асинхронного метода?

mscorlib.dll! System.Threading.EventWaitHandle.Set () + 0xe байт
mscorlib.dll! Система.Runtime.Remoting.Messaging.AsyncResult.SyncProcessMessage (System.Runtime.Messaging.IMessage msg, System.Runtime.Remoting.Messaging.IMessageSink replySink = {System.Runtime.Remoting.Messaging.AsyncResult}) + 0x279 байт..mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executeContext, System.Threading.Conобратный вызов textCallback, состояние объекта) + 0x6f байт
mscorlib.dll! System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal (System.Threading._ThreadPoolWaitCallback tpWaitCallBack)состояние) + 0x59 байт

Ответы [ 3 ]

14 голосов
/ 04 января 2011

Проблема была вызвана тем, что я использовал блок using () {}.

    using (WaitHandle handle = asyncResponse.AsyncWaitHandle)
    {
      asyncResponse.AsyncWaitHandle.WaitOne();
      string response = asyncRequest.EndInvoke(asyncResponse);
      asyncResponse.AsyncWaitHandle.Close();
      return response;
    } 

Когда вызывающий поток прерывается, блок using все еще вызывает Close на WaitHandle.

14 голосов
/ 17 декабря 2010

Вы утилизируете что-то, что все еще используется другим потоком.

0 голосов
/ 16 мая 2018

Бродя с безопасностью по API и с ошибкой "Пользователи":

[Authorize(Roles = "User")] // exception...

ObjectDisposedException: безопасный дескриптор закрыт

Должно было быть:

[Authorize(Roles = "Users")] // works!

Когда группа не существует, выдается другая ошибка, например:

[Authorize(Roles = "SomeGroupThatDoesNotExist")]

Win32Exception: не удалось установить доверительные отношения между основным доменом и доверенным доменом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...