WPF应用程序崩溃;类型为';System.ComponentModel.Win32Exception';出
本文关键字:Win32Exception System ComponentModel 应用程序 崩溃 类型 WPF | 更新日期: 2023-09-27 18:25:16
我正在开发一个使用.net 3.5的应用程序,该应用程序是32位的,在64位的windows7上使用。
调用showDialog()时应用程序崩溃,以下是代码片段和引发异常。
例外:
WindowsBase.dll 中发生类型为"System.ComponentModel.Win32Exception"的未处理异常
附加信息:没有足够的配额可用于处理此命令
代码段:
try
{
WindowInteropHelper l_WndInteropHelper = new WindowInteropHelper(this);
l_WndInteropHelper.Owner = f_pParentWnd;
this.f_pParentWnd = f_pParentWnd;
m_bWndDisplayed = true;
this.ShowDialog();
//reset to false as window will be closed by this time.
m_bWndDisplayed = false;
}
catch (Exception ex)
{}
当我使用同一应用程序的64位版本时,问题不会复制。
以下是在showDialog()
和exception之间生成的调用堆栈。
->WindowsBase.dll!MS.Win32.UnsafeNativeMethods.PostMessage(System.Runtime.InteropServices.HandleRef hwnd, int msg, System.IntPtr wparam, System.IntPtr lparam) + 0x3d bytes
->PresentationCore.dll!System.Windows.Interop.HwndTarget.UpdateWindowSettings(bool enableRenderTarget, System.Windows.Media.Composition.DUCE.ChannelSet? channelSet) + 0x3ce bytes
->PresentationCore.dll!System.Windows.Interop.HwndTarget.UpdateWindowSettings(bool enableRenderTarget) + 0x2f bytes
->PresentationCore.dll!System.Windows.Interop.HwndTarget.UpdateWindowPos(System.IntPtr lParam) + 0x185 bytes
->PresentationCore.dll!System.Windows.Interop.HwndTarget.HandleMessage(int msg, System.IntPtr wparam, System.IntPtr lparam) + 0xff bytes
->PresentationCore.dll!System.Windows.Interop.HwndSource.HwndTargetFilterMessage(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) + 0x3a bytes
->WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) + 0xbe bytes
->WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) + 0x7a bytes
->WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, bool isSingleParameter) + 0x8a bytes
->WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler) + 0x4a bytes
->WindowsBase.dll!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler) + 0x44 bytes
->WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, bool isSingleParameter) + 0x91 bytes
->WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority priority, System.Delegate method, object arg) + 0x40 bytes
->WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam) + 0xdc bytes
->[Native to Managed Transition]
->user32.dll!74c362fa()
->[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
->user32.dll!74c37316()
->user32.dll!74c36ce9()
->user32.dll!74c36de8()
->user32.dll!74c38f09()
->ntdll.dll!76f1010a()
->user32.dll!74c38e63()
->[Managed to Native Transition]
->PresentationFramework.dll!System.Windows.Window.SetupInitialState(double requestedTop, double requestedLeft, double requestedWidth, double requestedHeight) + 0x5a7 bytes
->PresentationFramework.dll!System.Windows.Window.CreateSourceWindowImpl() + 0x19b bytes
->PresentationFramework.dll!System.Windows.Window.SafeCreateWindow() + 0x29 bytes
->PresentationFramework.dll!System.Windows.Window.ShowHelper(object booleanBox) + 0x81 bytes
->PresentationFramework.dll!System.Windows.Window.Show() + 0x48 bytes
->PresentationFramework.dll!System.Windows.Window.ShowDialog() + 0x29f bytes
您似乎正在尝试pinvoke来确定窗口所有者?与其这样做,只需将"this"上的"Owner"设置为要作为父对象的"Window"类型的其他对象。
this.Owner=myParentWindow;