【发布时间】:2012-01-17 22:11:14
【问题描述】:
以下代码因异常而崩溃:
MyWindow wnd = new MyWindow();
wnd.Show(); //here an exception occurs
异常很奇怪,但据我了解,它是 .net 中的一个错误
System.ComponentModel.Win32Exception (0x80004005): The operation completed successfully
at MS.Win32.UnsafeNativeMethods.GetDC(HandleRef hWnd)
at System.Windows.Interop.HwndTarget..ctor(IntPtr hwnd)
at System.Windows.Interop.HwndSource.Initialize(HwndSourceParameters parameters)
at System.Windows.Interop.HwndSource..ctor(HwndSourceParameters parameters)
at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
at System.Windows.Window.CreateSourceWindowDuringShow()
at System.Windows.Window.SafeCreateWindowDuringShow()
at System.Windows.Window.ShowHelper(Object booleanBox)
at System.Windows.Window.Show()
MyWindow 对象是一个窗口,里面有一些矢量图形,但不会太多。此外,当已经打开和关闭了 10-20 个 MyWindow 对象时会发生这种情况。
解决方案:原因是 GDI 对象泄漏。它们在我的低级代码中创建包含错误。因此,问题与 MyWindow 对象无关。
【问题讨论】:
-
如果你不是从主线程创建窗口,你可能有太多的
Dispatchers活着。尝试遵循建议的解决方法on Connect issue。可能你的 windows 消耗了太多资源。 -
在MyWindow的构造函数中做了什么?你重写了 show 方法吗?
-
@rekire 不,我不覆盖。构造函数中唯一的行是 InitializeComponent()
-
我有同样的问题,但在不同的环境中。注意到@rekire 提到了 Show() 方法。因为我在做 MVVM,所以我在
App.xaml.cs中覆盖Startup()并在其中使用window.Show()。当我尝试使用处理程序进行 BluetoothWin32Authentication 时,这是否可能导致问题? -
我实际上是我在一个新项目中的一个班轮,只有一个按钮,没有 MVVM,什么都没有。仍然得到同样的错误。