本文介绍了ElementHost控件导致Not Enought配额异常。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 使用我的Windows窗体应用程序,我偶尔会收到"没有足够的配额来执行此命令"的异常。 当应用程序显示包含ElementHost的表单时,就会发生这种情况。  ElementHost控件包含一个DataGrid,我认为可能是问题。 事实证明,DataGrid与异常无关。 我从ElementHost中删除了DataGrid,但仍然发生了异常。我发现了一些类似的帖子,但我可以在没有任何UIElements的情况下获得异常,所以我认为消息不会是超载。With my Windows Forms application I occasionally get an exception 'not enough quota to preform this command'.  It occurs when the application shows the form that contains an ElementHost.  The ElementHost control contains a DataGrid which I thought could be the problem.  It turns out that the DataGrid has nothing to do with the exception.  I removed the DataGrid from the ElementHost and the exception still occurs. I've found a few posts that are similar but I can get the exception without any UIElements so I would think that the message que wouldn't be overloaded.任何想法?谢谢。 System.ComponentModel.Win32Exception(0x80004005):没有足够的配额可用于处理此命令   在MS.Win32.UnsafeNativeMethods.PostMessage(HandleRef hwnd,WindowMessage msg,IntPtr wparam,IntPtr lparam)   在System.Windows.Interop.HwndTarget.UpdateWindowSettings(布尔值enableRenderTarget,Nullable`1 channelSet)   在System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr lParam)   在System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg,IntPtr wparam,IntPtr lparam)   在System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,Boolean& handling)   在MS.Win32.HwndWrapper.WndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,Boolean& processed)   在MS.Win32.HwndSubclass.DispatcherCallbackOperation(对象o)   在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs)    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate method,Object args,Int32 numArgs,Delegate catchHandler)   在System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority,TimeSpan timeout,Delegate方法,Object args,Int32 numArgs)   在MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam)   在MS.Win32.SafeNativeMethods.SetWindowPos(IntPtr hWnd,IntPtr hWndInsertAfter,Int32 x,Int32 y,Int32 cx,Int32 cy,Int32 flags)   在System.Windows.Forms.Integration.ElementHost.SetHWndSourceWindowPos()   在System.Windows.Forms.Integration.ElementHost.WndProc(消息& m)   在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& m)   在System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& m)   在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)System.ComponentModel.Win32Exception (0x80004005): Not enough quota is available to process this command   at MS.Win32.UnsafeNativeMethods.PostMessage(HandleRef hwnd, WindowMessage msg, IntPtr wparam, IntPtr lparam)   at System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean enableRenderTarget, Nullable`1 channelSet)   at System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr lParam)   at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)   at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)   at MS.Win32.SafeNativeMethods.SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, Int32 x, Int32 y, Int32 cx, Int32 cy, Int32 flags)   at System.Windows.Forms.Integration.ElementHost.SetHWndSourceWindowPos()   at System.Windows.Forms.Integration.ElementHost.WndProc(Message& m)   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)推荐答案 根据您的描述,当应用程序显示包含ElementHost控件的表单时,您偶尔会收到"没有足够的配额来执行此命令"的异常。  根据我的研究,你可以参考引用有类似的例外。为了节省您的时间,我将在此处分享一些信息。 此异常消息中引用的'配额':没有足够的配额可用于处理此命令 "进程可分配的特定类型的Windows资源量在技术上仅受进程可用虚拟内存量的限制。这可能是一个相当大的数字,特别是在Windows的64位版本上。其中一些资源从内部堆中撤出,所有其他进程也从中撤回。如果Windows允许一个进程全部使用它,那么仍然是一个非常大的数字。 这当然没有意义,绝不允许流程吞噬所有可用资源。配额的作用是什么,它设定了某种类型的计算资源数量的上限。常见的例子是10,000 windows,10,000 GDI对象,10,000个句柄。并非所有这些都是很好的圆形数字,比如这个btw。 它会了解更多关于PostMessage()调用的内容,但合理的猜测是它将消息队列大小推过配额。同样,一种技术上仅限于可用虚拟内存大小的资源。但实际上应该保持在那个南方。如果准确,您发布的消息速度超过消费速度,则需要进行限制。这发生在您的程序终止的确切时间表明可能需要另一种解释。 线程关闭订单问题,可能。" 诊断"超过配额"Win32Exception "错误告诉您窗口的消息队列在向其发送消息时达到了其最大容量。这意味着拥有该窗口的线程没有足够快地处理消息,如果有的话。" 如果您的项目类型是WPF并且问题仍然存在,我建议您将其发布在WPF论坛中,您可以联系WPF专家。 WPF论坛: http://social.msdn.microsoft.com/Forums/en-US/home?forum=wpf 问候, ZeTan 这篇关于ElementHost控件导致Not Enought配额异常。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-22 17:34