Diskuze: Windows Phone - App.xaml.cs nezachytí výjimku

C# .NET .NET (C# a Visual Basic) Windows Phone - App.xaml.cs nezachytí výjimku American English version English version

Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Zdravím hoši, mám zase něco divného. Při zapnutí aplikace (Windows Phone) chci načíst data. Pokud data neexistují vyhodím výjimku.

try
           {
               Projects.Clear();
               ObservableCollection<Project> list = await dataSrl.LoadFileAsync<Project>("projects", Windows.Storage.ApplicationData.Current.LocalFolder);
               foreach (Project item in list)
                   Projects.Add(item);
           }
           catch (Exception e)
           {
               throw new ArgumentException("Error during loading data", e);
           }

v App.xaml.cs metodě Application_Lau­nching mám následující

try
{
  Manager.Load();
}
catch(Exception ex)
{ Debug.WriteLine(ex.Message); }

ale výjimka se nezachytí. Nějaké nápady ?

Odpovědět 1.2.2014 12:06
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Nahoru Odpovědět 1.2.2014 12:18
Nesnáším {}, proto se jim vyhýbám.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Petr Nymsa:

Právě že žádná, prostě to nezachytí. Ten try/catch má výjimku z manageru zachytit. Ale ignoruje to / přeskočí. VS 13 mě už sem tam dokázali pěkně překvapit, zvlášť u WP. Někdy neukáže chybu a jenom to spadne a do Output napíše že "někde" došlo k výjimce, když máš štěstí napíše +- jaká

Nahoru Odpovědět 1.2.2014 12:23
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Petr Nymsa:

"An exception of type 'System.Argumen­tException' occurred in Unknown Module. but was not handled in user code" tohle mi napíše. Nechápu v čem je problém.

Nahoru Odpovědět 1.2.2014 12:27
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Nakonec zjišťuju že to absolutně neumí zachytit výjimku a dál ji propagovat...Ne­napadá někoho kde by mohla být chyba ? Na googlu hledám, ale nemůžu najít nic pořádně

Nahoru Odpovědět 1.2.2014 12:38
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michal Žůrek (misaz):

"but was not handled in user code" napíše snad úplně ke všemu. Nejlepší je ty soubory ošetřovat ifem.

Nahoru Odpovědět 1.2.2014 12:39
Nesnáším {}, proto se jim vyhýbám.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Petr Nymsa:

To je blbost. Může tam dojít k různým výjimkám. Proto také výjimky máme. Sice může existovat soubor, ale může dojít k chybě při čtení, špatné parsování, .... nebudu tam vše IFovat

Nahoru Odpovědět 1.2.2014 13:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Michal Žůrek (misaz):

ještě si zkus hodit breakpoint do catch, ať víš jestli se tam vůbec dostane a ať ti ukáže co je tam dál. Ony ty vyjimky na Windows Phone sice nic moc ze začátku neříkají, ale zobrazíš si detaily a innerException, dozvíš se mnohdy o hodně víc.

Nahoru Odpovědět 1.2.2014 13:38
Nesnáším {}, proto se jim vyhýbám.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Petr Nymsa:

Skočí to tam. Každopádně problém bude v celém VS a SDK. Ptal jsem teď někoho kdo si s WP rozumí už hodně dlouho. Pokud člověk má více verzí VS, SDK, IIS, Apache, MS-SQL server, ... nejspíš se to sesype. Takže reinstal SDK, případně reinstal VS. A v úplně nejhorším případě reinstal OS

BTW nefunguje ani toto

try {
int a = int.Parse("aaaa");
}
catch(Exception e){
throw new ArgumentException("Chyba při parsování",e);
}
Nahoru Odpovědět 1.2.2014 13:41
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Lidi,potřebuju opravdu help. Nevidíte kde je chyba ? Proč to výjimku nezachytí (resp. nepropaguje dál ?) Jedná se o Windows Phone.

public async void LoadDataAsync()
      {
          try
          {
              Projects.Clear();
              ObservableCollection<Project> list = await dataSrl.LoadFileAsync<Project>("projects", Windows.Storage.ApplicationData.Current.LocalFolder);
              foreach (Project item in list)
                  Projects.Add(item);
          }
          catch (Exception e)
          {
              throw new Exception("Error during loading data", e);
          }
      }

Debugger skončí na řádku throw new Exception...

Metodu volám

try
           { App.Manager.ProjectManager.LoadDataAsync(); }
           catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); }
Nahoru Odpovědět 2.2.2014 18:10
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Ještě jedna "zajímavost" (test).

try
           {
               await Task.Run(() =>
               {
                   for (int i = 0; i < 100; i++)
                   {
                       if (i % 10 == 0)
                       { int b = int.Parse("AAA"); }
                   }

               });
           }
           catch(Exception e)
           { throw new ArgumentException("Chyba", e); }

Na řádku int b debugger skončí

An exception of type 'System.FormatException' occurred in mscorlib.ni.dll but was not handled in user code

Additional information: Input string was not in a correct format.
Editováno 2.2.2014 18:15
Nahoru Odpovědět 2.2.2014 18:15
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
m4r10
Redaktor
Avatar
m4r10:

http://stackoverflow.com/…-async-await

To je tak tezke pouzit google?

Editováno 2.2.2014 18:18
 
Nahoru Odpovědět 2.2.2014 18:17
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na m4r10
Petr Nymsa:

No, taky už mě to došlo jakmile jsem zkusil ten druhý test. BOže, občas mám pocit že kdybych prodával párek v rohlíku někde na ulici se budu 3x líp :@ Ale tak, asi kvůli tomuhle nás to všechny tak nádherně baví, no ne ? :D

Nahoru Odpovědět 2.2.2014 18:24
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.