{"id":1185,"date":"2019-05-05T10:32:13","date_gmt":"2019-05-05T09:32:13","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=1185"},"modified":"2019-05-05T10:32:17","modified_gmt":"2019-05-05T09:32:17","slug":"u-mnie-dziala-ale-tylko-pod-debuggerem","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2019\/05\/05\/u-mnie-dziala-ale-tylko-pod-debuggerem\/","title":{"rendered":"U mnie dzia\u0142a \u2013 ale tylko pod debuggerem"},"content":{"rendered":"<p style=\"text-align: justify;\">Jedn\u0105 z zalet tego, jak co\u015b si\u0119 robi jest to, \u017ce czasami co\u015b udaje \u017ce dzia\u0142a. A jak to m\u00f3wi m\u00f3j wybranek \u017cyciowy \u2013 \u201eJak co\u015b czasami nie dzia\u0142a, to to nie dzia\u0142a\u201d. Tak\u017ce pisz\u0119 sobie kod uczelniany typowo, i w kt\u00f3rym\u015b momencie, ten wg mnie \u201esko\u0144czony\u201d projekt pr\u00f3buj\u0119 odpali\u0107 poza debuggerem. I tak zaczyna si\u0119 moja historia, bo okazuje si\u0119, \u017ce to NIE dzia\u0142a. No chyba \u017ce uruchomi\u0119 poza debuggerem i potem debugger podepn\u0119.<\/p>\n\n\n<!--more-->\n\n\n<p style=\"text-align: justify;\"><br \/>Tak czy inaczej dzia\u0142a\u0142o, a potem podpi\u0119\u0142am najprostszy mo\u017cliwy panel logowania. Nowe wpfowe okno, textbox, passwordbox, 2 textblocki, przycisk OK. Potem u\u017cy\u0142am tego mniej wi\u0119cej tak:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>   protected override void OnStartup(StartupEventArgs e)\n        {\n            base.OnStartup(e);\n            loginWindow = new LoginWindow(Parameters);\n            loginWindow.ShowDialog();\n            IContainer container = bootstrapper.Bootstrap();\n            var mainViewModel = container.Resolve&lt;MainViewModel>();\n            MainWindow = new MainWindow(mainViewModel);\n            MainWindow.Show();\n            mainViewModel.Load();\n        }<\/code><\/pre>\n\n\n<p>No i problem by\u0142 taki, \u017ce o ile pod debuggerem pojawia\u0142o mi si\u0119 drugie okno, to poza ju\u017c nie. Dlaczego?<\/p>\n<p style=\"text-align: justify;\">Nie, to nie prism czy tam autofac popsu\u0142, cho\u0107 pocz\u0105tkowo to ich obwini\u0142am. Po prostu mi\u0119dzy zamkni\u0119ciem okienka z logowaniem a otwarciem g\u0142\u00f3wnego okienka z aplikacj\u0105 min\u0119\u0142o kilka cykli (kt\u00f3re by\u0142y potrzebne aby si\u0119 rzekomi winowajcy przygotowali si\u0119 do roboty) a WPF domy\u015blnie jak nie wy\u015bwietla \u017cadnego okna to ubija aplikacj\u0119. Czasami si\u0119 zdarzy, \u017ce zacznie ubija\u0107 w trakcie otwierania ju\u017c okienka i mamy InvalidOperationException z takim stack tracem<\/p>\n\n\n<pre class=\"wp-block-code\"><code>at System.Windows.Application.GetResourcePackage(Uri packageUri) at System.Windows.Application.GetResourceOrContentPart(Uri uri) at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) at Drawing.MoleculeView.InitializeComponent() in (\u2026)<\/code><\/pre>\n\n\n<p>i tak go skuba\u0144ca z\u0142apa\u0142am (dla os\u00f3b co jeszcze pr\u00f3buj\u0105 zabrn\u0105\u0107 w t\u0105 \u015blep\u0105 uliczk\u0119 i si\u0119 ucz\u0105 WPFa w 2019 nadmieni\u0119, \u017ce wystarczy w app.xaml do Application doda\u0107<\/p>\n\n\n<pre class=\"wp-block-code\"><code>DispatcherUnhandledException=\"App_OnDispatcherUnhandledException\"<\/code><\/pre>\n\n\n<p>zaimplementowa\u0107 zrzucaj\u0105c exception gdzie b\u0105d\u017a, przy appkach na w\u0142asne potrzeby mo\u017ce by\u0107 nawet do<\/p>\n\n\n<pre class=\"wp-block-code\"><code>MessageBox.Show(e.Exception.Message+e.Exception.GetType().FullName+e.Exception.StackTrace);<\/code><\/pre>\n\n\n<p>jak w moim przypadku.<\/p>\n<p style=\"text-align: justify;\">Skoro ju\u017c to mamy, to sprawa prosta \u2013 tak, wpfie, wiem \u017ce przez mniej ni\u017c sekund\u0119 \u017cadnego okna nie ma, wi\u0119c daruj sobie \u015bledzenie otwartych okien (<span style=\"color: #ff0000;\"><span style=\"font-family: Consolas;\"><span style=\"font-size: small;\">ShutdownMode<\/span><\/span><\/span><span style=\"color: #0000ff;\"><span style=\"font-family: Consolas;\"><span style=\"font-size: small;\">=&#8221;OnExplicitShutdown&#8221;<\/span><\/span><\/span><\/p>\n<p style=\"text-align: justify;\">w Application z app.xaml) ale pozw\u00f3l, \u017ce to ja ci powiem kiedy masz si\u0119 ubi\u0107 \u2013 tj w g\u0142\u00f3wnym oknie da\u0107 to:<\/p>\n\n\n<pre class=\"wp-block-code\"><code> protected override void OnClosing(CancelEventArgs e)\n        {\n            base.OnClosing(e);\n            App.Current.Shutdown(); \/\/ doda\u0107 to\n        }<\/code><\/pre>\n\n\n<p>Teraz dzia\u0142a wsz\u0119dzie.<\/p>","protected":false},"excerpt":{"rendered":"<p>Jak naprawi\u0107 problem z tym, \u017ce czasami aplikacja si\u0119 ubija zanim poka\u017ce si\u0119 jej g\u0142\u00f3wne okno.<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2019\/05\/05\/u-mnie-dziala-ale-tylko-pod-debuggerem\/\">Lecim dalej<span class=\"screen-reader-text\">U mnie dzia\u0142a \u2013 ale tylko pod debuggerem<\/span> <i class=\"fas fa-angle-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,83,696,645,180,581,49,143],"tags":[691,693,262,619,692,694,141,695,202],"class_list":["post-1185","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii","category-c_sharp","category-c_sharp-2","category-gmtl","category-libs","category-programming","category-programowanie","category-wpf","tag-autofac","tag-bugi","tag-c_sharp","tag-gmtl","tag-prism","tag-solucje","tag-studia","tag-umniedziala","tag-visual-studio","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/1185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=1185"}],"version-history":[{"count":2,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/1185\/revisions"}],"predecessor-version":[{"id":1187,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/1185\/revisions\/1187"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=1185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=1185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=1185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}