我们有一个WinForm应用程序,即使在关闭后也会重新启动,然后再次关闭。我们面临的问题如下: - 用户双击exe以启动应用程序。 - 在应用程序完全启动之前,用户通过单击关闭按钮关闭会话。 - 应用程序关闭,然后再次在屏幕上重新闪烁并关闭。 即使应用程序窗口关闭,后台进程仍然存在。从我们看到的垃圾场,主要形式" IsDisposed" property设置为true。我们的应用程序中的代码如下所示:
public Form MainForm {
get {
if (frmApp == null || frmApp.isDisposed) {
_mainForm = new frmApp();
}
}
}
因此,在所有地方我们使用此MainForm属性来访问我们的主winForm。 什么事情发生在每次" MainForm"在代码中遇到,由于isDisposed设置为true,它会尝试再次创建表单。每当" MainForm"时,它就会递归地进行。遇到了。 但是,我担心的是,为什么它在关闭表格后重新闪现一次,最终导致上述行为。
以下是来自WinDBG的堆栈跟踪:
000000c01bdfbb40 00007fff6b3e53b3 System.Windows.Forms.NativeWindow.Callback(IntPtr, Int32, IntPtr, IntPtr) 000000c01bdfbbe0 00007fff6ba56f59 DomainBoundILStubClass.IL_STUB_ReversePInvoke(Int64, Int32, Int64, Int64) 000000c01bdfbfb8 00007fff903321fe [InlinedCallFrame: 000000c01bdfbfb8] System.Windows.Forms.SafeNativeMethods.ShowWindow(System.Runtime.InteropServices.HandleRef, Int32) 000000c01bdfbfb8 00007fff6b469064 [InlinedCallFrame: 000000c01bdfbfb8] System.Windows.Forms.SafeNativeMethods.ShowWindow(System.Runtime.InteropServices.HandleRef, Int32) 000000c01bdfbf90 00007fff6b469064 DomainBoundILStubClass.IL_STUB_PInvoke(System.Runtime.InteropServices.HandleRef, Int32) 000000c01bdfc040 00007fff6b3e250c System.Windows.Forms.Control.SetVisibleCore(Boolean) 000000c01bdfc0f0 00007fff6b3f0cde System.Windows.Forms.Form.SetVisibleCore(Boolean) 000000c01bdfc150 00007fff6b43dd56 System.Windows.Forms.Control.Show()
从调用堆栈的下方开始,After" Show-> SetVisibleCore-> SetVisibleCore"调用它,它执行一些本机窗口方法,然后调用" CallBack"然后调用堆栈再次启动窗口。抱歉,由于隐私问题,我无法在此发布整个通话堆栈。但是,我们将赞赏任何有关如何确定问题根本原因的线索或任何建议。它导致启动应用程序的citrix盒子崩溃,因为用户对象计数达到指定的限制,导致愤怒的客户端。
这是来自VS的堆栈跟踪:
System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallback(System.IntPtr hWnd, int msg, System.IntPtr wparam, System.IntPtr lparam) Unknown
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.Forms.dll!System.Windows.Forms.Control.SetVisibleCore(bool value) Unknown
System.Windows.Forms.dll!System.Windows.Forms.Form.SetVisibleCore(bool value) Unknown
System.Windows.Forms.dll!System.Windows.Forms.Control.Show() Unknown
我在这里通过为DebuggableCallback方法提供的注释:NativeWindows并且它表示在向此窗口发送Windows消息时调用它。是否可能由于很少有待执行的事件可能会在以后执行时导致这种情况发生?