我遇到的问题是以下错误:
System.ComponentModel.Win32Exception(0x80004005):操作成功完成
堆栈追踪:
at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
at MS.Win32.MessageOnlyHwndWrapper..ctor()
at System.Windows.Threading.Dispatcher..ctor()
at System.Windows.Threading.Dispatcher.get_CurrentDispatcher()
at System.Windows.Threading.DispatcherObject..ctor()
at System.Windows.Media.Imaging.BitmapDecoder..ctor(SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, Boolean insertInDecoderCache, Boolean isOriginalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle)
at System.Windows.Media.Imaging.JpegBitmapDecoder..ctor(SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, Boolean insertInDecoderCache, Boolean originalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle)
at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
at System.Windows.Media.Imaging.BitmapDecoder.Create(Stream bitmapStream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption)
at App.Business.WPFImageService.ReadBitmapFrame(Stream stream)
at App.Business.WPFImageService.UploadFileToAmazon(String amazonPath, Boolean isBlankImage)
通过一些研究,我发现当Handles
的数量超过10k时,会发生此问题。如果我忘记拨打.Dispose()
方法,就会发生这种情况。
在我的应用程序中,我清楚地(100%肯定)处理实现IDisposable
的每个对象。
虽然我仍然面临这个问题,但现在我不确定使用后必须清除的每个对象都会实现IDisposable
。
我在我的应用中使用了以下类型的对象。
BitmapFrame
,DrawingVisual
,DrawingContext
,RenderTargetBitmap
,SolidColorBrush
,BitmapDecoder
,Stream
,MemoryStream
,FileStream
,PngBitmapEncoder
。
Stream
,MemoryStream
和FileStream
实现IDisposable
,我明确地在其上调用Dispose()
。但是,DrawingContext
没有实现IDisposable
但是有一个.Close()
方法,也被调用。
其他对象没有.Dispose()
,.Close()
,Flush()
或任何与该主题相关的内容。
我卡住了,为什么我的句柄超过10k(我已经通过添加Handle列从托管任务中检查过)。在使用WPF / WIC添加一些图像处理功能之前,此应用程序没有此问题。
有什么想法吗?
答案 0 :(得分:1)
尝试确保您也尝试使用语句来确保获得垃圾回收
using (DrawingContext dc = dGroup.Open())
http://msdn.microsoft.com/en-us/library/system.windows.media.drawingcontext(v=vs.110).aspx