Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

zpracovani vyjimek v aplikaci s nekolika urovnemi modalnich dialogu

Buthrakaur (61)|22.3.2006 14:31
zase budu mit jeden extremni problem ;)

Mam aplikaci nad .Net CF 1 (na zarizeni je sp3) a zjistil jsem, ze mi neodchytava spravne vyjimky (resp i kdyz mam spravne try..catch blok, tak aplikace spadne). Aplikace obsahuje hlavni formular, ze ktereho se spousti smycka modalnich dialogu (nektere modalni okna jeste samy zobrazuji dalsi modalni okna). Smycku z hlavniho formulare pousim z try..catch bloku. Pokud dojde na modalnim formulari k neosetrene vyjimce, try..catch blok chybu odchyti, ale v ten moment v aplikaci uplne prestane fungovat princip modalnich oken - pokud v catch zavolam MessageBos.Show("chyba 123"), tak se okno samo okamzite zavre. Nasleduje vzdycky pad aplikace.

Pro jistotu jsem si to jeste overil na nove aplikaci - zalozil jsem aplikaci se 3 formulari. Form1 obsahuje tlacitko, ktere udela Form2.ShowDialog(). Form2 obsahuje podobne tlacitko, ktere otevre stejnym zpusobem Form3. na Form2 a 3 je jeste navic tlacitko, ktere vyhodi vyjimku. Tlacitko na Form1 vola kod:

[CODE]
try
{
Form frm = new Form2();
frm.ShowDialog();
frm.Dispose();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
finally
{
MessageBox.Show("END");
}
[/CODE]

Form2+3 neobsahuji try..catch blok. Pokud na Form2 nebo 3 vyvolam vyjimku stisknutim tlacitka, na displayi probliknou rychle po sobe messageboxy z catch a finally na Form1 a aplikace spadne.

Nesetkal jste se s timhle problemem nekdo? Kdyztak muzu nekam umisit i primo VS2k3 projekt...
Buthrakaur (61)|23.3.2006 09:49
jeste jsem ted zjistil, ze se asi jedna o problem, ktery souvisi pouze s CF1 SP3 - kdyz aplikaci zkousim na cistem emulatoru (bez SP), tak vsechno funguje, jak ma. pokud na emulatoru doinstaluju CF SP3 (netcf.all.wce4.X86.cab), tak se teprve zacne chyba projevovat... na zarizeni, ktere mam ted k dispozici (symbol mc9060) je uz ve vychozim stavu bez sp3 vyssi verze cf, ktera i tak chybu zpusobuje.

verze cf:
Emulator bez SP3: 1.0.2268.00 - vsechno funguje spravne
Emulator i Symbol s SP3: 1.0.4292.00 - chyba se projevuje
Symbol bez SP3: 1.0.3111.00 - chyba se projevuje

vypada to teda, ze je chyba v samotnem cf od urcite verze vys - zajimave, ze se mi nepodarilo vygooglit tenhle problem u nekoho jineho...
beecher (9270)|23.3.2006 10:52
Jenom takova drobna poznamka... Mne celkem prekvapuje, ze neodchytavate exceptiony ve formu, ktery tu exception zpusobil...
Pokud ji potrebujete dostat do volajiciho formu, tak je nutne raisenout event, ze nastala exception...
Tedy aspon ja to tak vzdycky programuji... ;)
Buthrakaur (61)|23.3.2006 11:04
takovouhle "vecnou" reakci jsem presne cekal... :/

samozrejme, ze tak programuju - na tuhle chybu jsem prisel az diky jedne komercni gui komponente (resco smartgrid), ve ktere je chyba, ktera se za urcitych podminek projevi az behem zobrazeni forulare (frm.ShowDialog()). ShowDialog() mam samozrejme v try..catch, ale v momente odchyceni vyjimky uz v cele moji aplikaci nefunguje modalni zobrazovani oken, takze se cela aplikace zhrouti - viz moje predchazejici prispevky... proto jsem se snazil zjistit, v cem je zakopany pes, pomoci tehle jednoduche testovaci aplikace, ktera chybu v cf reprodukuje...

btw testovaci aplikaci (VS2k3 solution) jsem daj sem
RStein (2012)|23.3.2006 18:44
Myslim, ze tohle souvisi se zpracovanim messages ve fronte v raqmci catch sekce.

Zkuste vyhodit volani MessageBox z catch i Finally - v catch nastavte bool promennou s chybou

[CODE]bool error = false;
string message = String.Empty;
try
{
Form frm = new Form2();
frm.ShowDialog();
frm.Dispose();
}
catch (Exception exc)
{
error = true;
message = exc.Message;
}
finally
{

}

if (error)
{
MessageBox.Show(message);
}[/CODE]
beecher (9270)|23.3.2006 19:46
FYI na okraj: Padne to i na CF 2.0.
Buthrakaur (61)|24.3.2006 08:27
2beecher: diky za vyzkouseni & info... to mne opravdu netesi - doufal jsem, ze aspon prechod na CF2 (kteremu se stejne nevyhnu) to vyresi :(

2rstein: ted jsem to vyzkousel a pada to uplne stejne - proste jakmile dojde v modalnim okne k neosetrene vyjimce, tak je fungovani modalnich oken v cele aplikaci v haji a aplikace postupne pozavira vsechny okna a ukonci se...

nemam v tomhle s MS zadnou zkusenost - jak se jim da takovyhle maxibug nahlasit? MSDN subscription nemam...
RStein (2012)|24.3.2006 10:33
Tak jsem to jeste vyzkousel sam, ne ze bych Vam neveril, ale zdalo se mi to divny.
Vypada to na oipravdu zakernou chybu prino v CNF, kdy se generuje neosetrena exception, kterou neni mozne zachytit :(

Nareportovat bug muzete zde.
http://lab.msdn.microsoft.com/ProductFeedback/
Buthrakaur (61)|24.3.2006 11:04
dik za overeni i u Vas - aspon mam ted jistotu, ze nedelam nekde chybu, ale ze je opravdu problem primo v CF...

zadal jsem bug u MS (doufam, ze spravne :) ) - doufam, ze se na to brzo podivaji...

http://lab.msdn.microsoft.com/ProductFeedback/viewFeedback.aspx?FeedbackId=1caf6129-eae7-493a-aa65-7d1829f613e4
Buthrakaur (61)|25.8.2006 14:36
uz je to delsi dobu, ale MS uz bug "vyresil" - teda spis jenom oznacil za vyreseny a dal o tom odmita zrejme komunikovat. zajimavy pristup :evil:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=94356
beecher (9270)|25.8.2006 14:51
Pokud to chapu dobre, tak to oznacili resolved z duvodu toho, ze je to chyba v .NET CF core, na kterou neexistuje reseni bez zasahu do kodu vlastniho .NET CF. Tzn. vase hlaseni je "vyreseno" by design a asi maji nejaky mechanismus dalsiho zpracovani hlaseni, ktery uz nevidime...
Buthrakaur (61)|25.8.2006 14:55
aha - to zni rozumne... kdyz jsem videl "resloved: by design", tak jsem si predstavil spis redesign svoji aplikace - doufam, ze spatne ;) taky tam mohli napsat neco v tom stylu, ze v CF3 uz to bude ok nebo neco vic jednoznacneho....
beecher (9270)|25.8.2006 15:03
Nene, maji to proste spatne a asi nejaky architekt .NET CF nekde udelal asibku... Proto By Design... :)

A myslim, ze do CF3 je daleko... ;)