首页 > 其他分享 >记录一次新的报错

记录一次新的报错

时间:2024-05-22 18:58:54浏览次数:26  
标签:一次 Container 对话框 记录 报错 ShowDialog 关闭 var loginWindow

我在WPF程序登录窗体到主窗体跳转遇到问题,我没有写任何关闭,但是程序直接退出了,代码如下

  private IUnityContainer Container { get; }
  public Bootstrapper()
  {
      Container = ConfigureService();         
  }
  private IUnityContainer ConfigureService()
  {
      var container=new UnityContainer();
      xxxxx其他注册
      return container;
  }
 public void Run()
 {
     Application app = new Application();
     app.Resources.MergedDictionaries.Add(DefaultResource);
     var loginWindow = Container.Resolve<LoginWindow>();
     var viewModel = Container.Resolve<LoginWindowViewModel>();
     loginWindow.DataContext = viewModel;
     var result = loginWindow.ShowDialog();
     if (result == false)
     {
         Application.Current.Shutdown();

     }
     else
     {
         var mainWindow = Container.Resolve<MainWindow>();
         var mainViewModel = Container.Resolve<MainWindowViewModel>();
         mainWindow.DataContext = mainViewModel;
         mainWindow.Show();
         var s = app.Run(mainWindow);
     }

登录按钮传递了DialogResult过去,没有其他多余代码

 private void ExecuteLogin(Window win)
 {
     win.DialogResult = true;
 }

我将容器换成ServiceCollection,结果发现一样,程序直接退出,并且IServiceProvider 在解析的时候还会出现null,因为ServiceCollection和IUnityContainer不一样,IUnityContainer解析和注册是同一个接口,内部应该会自己实例化,使用IServiceProvider的时候,必须ServiceCollection注册一波,
言归正传。
当我替换

 var loginWindow = Container.Resolve<LoginWindow>();

 var loginWindow = new LoginWindow();

程序好了?并且底下

  var mainWindow = new MainWindow();
  var mainWindow = Container.Resolve<MainWindow>();

不管写哪一种程序都是好的,只有上面需要实例化,我将 var loginWindow = Container.Resolve();和 var loginWindow = new LoginWindow();同时保留在代码中,发现程序也是好的,反正就是需要实例化一个LoginWindow
,但是还是会出现一个问题主窗体程序关闭的时候VS2022还在运行,我只好写了

  public partial class MainWindow : Window
  {
      public MainWindow()
      {
          InitializeComponent();
      }

      protected override void OnClosed(EventArgs e)
      {
          Application.Current.Shutdown();
          base.OnClosed(e);
      }
  }

这两个问题我都解决了,但是只知道是容器生命周期和管理的问题,具体哪里不清楚,有知道的可以留言,一起探讨一下
这里的关键点是理解 ShowDialog 方法的工作方式:

ShowDialog 会阻塞当前线程,直到对话框窗口关闭。
当对话框关闭,ShowDialog 返回一个 bool? 值,表示用户是以确认 (true) 还是取消 (false) 方式关闭了对话框。
一旦 ShowDialog 返回,对话框窗口实际上已经关闭,因此不会在屏幕上显示。
因此,loginWindow 的生命周期在用户关闭对话框时结束
关于 ShowDialog 返回值的一些细节:

如果用户关闭对话框(例如,点击了“确定”或“取消”按钮),ShowDialog 将返回一个 bool? 类型的值,该值是 true 或 false,取决于对话框的 DialogResult 属性。
如果 ShowDialog 返回 true,这通常表示用户以一种确认的方式关闭了对话框(例如,点击了“确定”按钮)。
如果 ShowDialog 返回 false,这通常表示用户以一种取消的方式关闭了对话框(例如,点击了“取消”按钮或关闭图标)。
一旦 ShowDialog 有返回值,无论它是 true 还是 false,对话框都会关闭。

标签:一次,Container,对话框,记录,报错,ShowDialog,关闭,var,loginWindow
From: https://www.cnblogs.com/guchen33/p/18206906

相关文章

  • Docker openjdk java AES 解密报错
    javaAES解密报错java.security.InvalidKeyException:Illegalkeysizeordefaultparametersatjavax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026)atjavax.crypto.Cipher.implInit(Cipher.java:801)atjavax.crypto.Cipher.chooseProvider(Cipher.java:864)atjavax.c......
  • 经常出差用哪些办公软件记录工作?可多设备同步使用的便签笔记软件
    对于许多职场人士来说,出差已成为工作常态。在旅途中,如何高效处理工作,确保信息不遗漏,成为了一个不小的挑战。那么,对于经常需要移动办公的我们,哪款办公软件才是最佳选择呢?可多设备同步使用的便签笔记软件是哪款?答案就是——敬业签,一款强大而便捷的便签笔记软件。它的强大之处在于其......
  • ITMS-90876 Missing entitlement 报错解决方法
    css3中的var()函数详解 发布时间:2024-05-2117:17:32 作者:佚名 我要评论在CSS3中,var()函数是一个用于插入CSS自定义属性(也称为CSS变量)的值的函数,它允许你在样式表中定义可重用的值,并在多个地方引用它们,从而使你的CSS更加灵活和可维护,这篇文章主要介绍了css3的var()函......
  • 后续学习记录(第二、三、四课)
    1迟到一刻钟,跟不上,影响学习效果(早一点去)2键盘鼠标不好用(选择一下)3晚上学习累,早睡,早起学习(睡好才能躺赢)4路上跟妈妈聊学了什么(提取练习)5拓展题有点抓瞎。难下手,容易错(分析题目——分解解题步骤——编程)6学会网上搜索答案(复习一下鸡兔同笼问题)7相关函数搭配相关头文件(......
  • 关于vue-baidu-map的一些记录
    这一阶段主要的内容是负责编写和百度地图相关的信息。(写到我想吐)仿照导航的页面效果。1.使用说明这里使用的是vue-baidu-map相关组件,这里我就不去说明如何去安装他们了,我们直接向下看。vue-baidu-map的操作手册的网址:VueBaiduMap(dafrok.github.io)。当然我这里介绍的那些只......
  • 记录连接数导致警报失效,连接池少问题
    处理方式:spring:datasource:maxActive:30改为1000org.springframework.transaction.CannotCreateTransactionException:CouldnotopenJDBCConnectionfortransaction;nestedexceptionisjava.sql.SQLTransientConnectionException:HikariPool-1-Connectionisnotav......
  • rabbitMq的status报错Error: unable to perform an operation on node ‘rabbit……
    遇到下图这个错大部分问题可能是由于 RabbitMQ CLI工具的ErlangCookie与服务器上的不匹配而导致连接问题。ErlangCookie在RabbitMQ节点之间进行身份验证和安全通信时起着重要作用。可以在c盘搜索一下看下两个.erlang.cookie文件中的内容是否一致,不一致的话就改成一致的......
  • 在一次渗透中学会编写Tamper脚本
    拿到这个网站,通过对比查询,我们发现闭合参数finsh时,查询出的内容更多经过进一步判断,确实存在漏洞不过在测试的时候发现存在一定的过滤但是可以通过内联注释进行绕过。这里也是加深了解了内联注释的知识点,之前只会简单的利用 /*!50000UniONSeLeCt*/ /*!12345union*/......
  • 深度学习吴恩达学习记录
     经典网络:LeNet-5: AlexNet: VGG-16:  ResNet网络:先引入残差块的概念:远眺连接概念:如下图中,除了正常的全连接外,还有将第一层计算的激活函数值不经过第二层直接使用到第二层的激活函数中,这就是一种远眺连接。而下面这种远眺连接与全连接的一块神经就是残差块。所以对......
  • 一些记录
    记录一些书籍  又是一年的521,一切都一如既往,工作真是让人心累,急剧地消耗着人的精力和情绪,在最失落时,才意识到书籍对我的重要性,想起高中笔记中自己写的一句话,“天择人择唯书不择”,经历这么多,才意识到所有的人都在进行着选择,都在选择更好的生活,这是人的本性。或许只有书籍能陪伴......