2010-12-17 27 views
12

Ben Güvenli tanıtıcı kapatıldıteşhis ObjectDisposedException

mesajla bir ObjectDisposedException vuruyor bir C# uygulaması var "Güvenli tanıtıcı kapatıldı"

Bu en kısa sürede başlatmak olarak gerçekleşir uygulama.

Ne yazık ki yığın izi gerçekten yararsızdır (aşağıya bakınız). Burada hangi çağrının asenkronize edilmeye çalışıldığını belirlemenin bir yolu var mı?

DoAsyncCall() gerçekten bir async yöntem çağrısı anlamına mı geliyor?

mscorlib.dll! System.Threading.EventWaitHandle.Set() + 0xE bayt
mscorlib.dll! System.Runtime.Remoting.Messaging.AsyncResult.SyncProcessMessage (System.Runtime.Remoting.Messaging.IMessage msg) + 0x12f bayt
mscorlib.dll! System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage (System.Runtime.Remoting.Messaging.IMessage msg, System.Runtime.Remoting.Messaging.IMessageSink replySink = {Sistemi. Runtime.Remoting.Messaging.AsyncResult}) + 0x279 bayt
mscorlib.dll! System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.DoAsyncCall() + 0x32 bayt Mscorlib.dll'de! System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack (nesne O) + 0x28 bayt mscorlib.dll! System.Threading._ThreadPoolWaitCallback.WaitCallback_Context (nesne durumu)
+ 0x2F bayt
mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext ExecutionContext, System.Threading.ContextCallback geri arama, nesne devlet) + 0x6f bayt
mscorlib.dll! System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal (Sistem. Threading._ThreadPoolWaitCallback tpWaitCallBack) + 0x53 bayt
mscorlib.dll ! System.Threading._ThreadPoolWaitCallback.PerformWaitCallback (Object devlet) + 0x59 bayt

cevap

11

Sorun, using using() {} bloğumdan kaynaklandı. çağıran iş parçacığı kullanarak blok kesilir

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

hala WaitHandle Kapat çağırıyor.

12

Hala farklı bir iş parçacığı tarafından kullanılmakta olan bir şeyi atarken edilmektedir.

+0

Bunun için teşekkürler - ne attığımı ve başka hangi iş parçacığının hala onu kullandığını öğrenmenin bir yolu var mı? – mchr

+4

@mchr: Hata ayıklama, işlev at, System.Runtime.InteropServices.SafeHandle.Dispose'. – SLaks

İlgili konular