gpt4 book ai didi

c# - Application.Run 在 Application.Exit 之后在同一个线程上不工作

转载 作者:行者123 更新时间:2023-11-30 12:12:49 26 4
gpt4 key购买 nike

我的工作要求是首先显示一个初始屏幕,该屏幕从用户那里获取一些数据,对其进行身份验证并启动另一个表单。因此,我使用 Application.Run 启动启动画面,一次,它完成了,调用 Application.Exit,然后再次调用 Application.Run 以获取新表单。但是,这不会启动新表单。我创建了一个新线程并将其 ApartmentModel 指定为 STA 以启动新表单。

我想了解为什么在调用 Application.Exit 后 Application.Run 不起作用?

示例代码:

        Application.Run(SplashForm);  

if (_authorizationSuccessful)
Application.Run(new Form2())
else
{
//just close
}

最佳答案

它相当复杂,但核心问题是它实际上不是使应用程序保持事件状态的表单。核心帮助程序类是 ApplicationContext,它也作为 Application.Run() 的重载之一公开。当您使用其他重载 Run() 和 Run(Form) 时,Application 类会创建一个隐藏的 ApplicationContext 实例。这是全局的,就像所有的应用程序属性和方法一样。

因此,当您调用 Application.Exit() 时,您将 ApplicationContext 的全局实例标记为“不再事件”。这使得对 Run(Form) 的下一个调用立即退出。

您可以改用自己的 ApplicationContext 实例来解决这个问题。但样板解决方案是在登录表单上使用 ShowDialog() 方法。 DialogResult 也是返回“登录成功,让我们继续”状态的好方法。

关于c# - Application.Run 在 Application.Exit 之后在同一个线程上不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12831741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com