Application.Run() 导致应用程序挂起
当我启动没有特定表单的应用程序时,例如
Application.Run();
然后我创建表单,在用户关闭它后,进程就会挂起。
这发生在 Visual Studio 之外。
我尝试将 Application.Exit()
和/或 Application.ExitThread()
放入表单的 Form_Closing
事件中,但它仍然挂起。
编辑:不幸的是,使用自定义 ApplicationContext 不起作用。
仅供参考,我没有使用任何线程,也没有使用BackgroundWorkers。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用“工具”+“附加到进程”将调试器附加到挂起的进程。调试+全部破坏。 Debug + Windows + Threads,双击主线程,查看其调用堆栈,看看它在做什么。如果这没有帮助,请在您的问题中发布堆栈跟踪。
Use Tools + Attach to Process to attach the debugger to the hung process. Debug + Break All. Debug + Windows + Threads, double-click the Main thread and look at its call stack to see what it is doing. Post the stack trace in your question if that doesn't help.
来自无参数 Application.Run() 的 MSDN:
因此,简短的回答是,尝试指定一个 ApplicationContext 对象,或者只是 Run() 您正在创建和显示的表单。也许一个更具体的例子来说明为什么您试图打开消息循环而不将其绑定到表单会有所帮助。您要打开多个表格吗?这是像闪屏或登录这样的介绍形式吗?
From the MSDN for the parameterless Application.Run():
So, short answer, try specifying an ApplicationContext object, or just Run() the form you are creating and showing. Maybe a more concrete example of why you're trying to open the message loop without tying it to a form would help. Are you opening several forms? Is this an introductory form like a splash screen or a login?
尝试使用
Application.Run(new MyForm()
) 的重载,尽管 Application.Exit() 应该按照 此处。Try using the overload of
Application.Run(new MyForm()
) instead, though Application.Exit() should be working for you as described here.