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

ulozeni stavu aplikace pri "nasilnem" ukonceni aplikace OS

Buthrakaur (61)|16.9.2005 10:52
snazim se osetrit ukonceni moji aplikace pri nedostatku pameti a naslednem automatickem nasilnem ukonceni vyvolanem OS... mainform aplikace slouzi pouze jako uvodni obrazovka, po spusteni se hned spusti "pruvodce", coz je prakticky nekonecny cyklus modalnich formularu...

mam ted ale problem s detekci nasilneho ukonceni formulare - OS zrejme ukoncuje modalni formulare pouze tak, ze jim nastavi DailogResult na OK a je hotovo... da se nejak detekovat, jestli byl dialog ukoncen nasilne? z DialogResult totiz nemuzu poznat, jestli byl form ukoncen uzivatelem nebo nasilne OS...

a dalsi vec o kterou mi jde a ktera s tim souvisi - jelikoz mam "pruvodce" jako modalni dialogy, objevuje se v seznamu bezicich uloh krome main-formu vzdycky i aktualni modalni okno a OS pak tedy neukoncuje celou aplikaci (resp main-form), ale jenom aktualni modalni formular... ja bych spis potreboval, aby OS bral moji aplikaci jako celek a v seznamu uloh ukazoval jenom main-form a ukoncoval automaticky taky primo mainform - da se toho nejak dosahnout?
Saman_ce4you (1451)|16.9.2005 13:03
A neposle ti spis WM_CLOSE, OK dialogu potvrzeny uzivatelem je jina zprava, ale na 100% to netvrdim..
Buthrakaur (61)|16.9.2005 13:33
mozny to je, ale kdyz se potom zeptam na DialogResult, tak je OK misto None - zkusim to jeste zjistit presne...

[CODE]
FormXY frm = new FormXY();
if (frm.ShowDialog() == DialogResult.OK){
//sem to spadne
}
[/CODE]


povedlo se mi ted aspon skryt okno z aktivnich uloh, tak mi ho treba ted aspon nebude ukoncovat ;)

[CODE]
using OpenNETCF.Win32;
....
Capture = true;
Win32Window hwnd = Win32Window.GetCapture();
Capture = false;
hwnd.ExtendedStyle |= WS_EX.TOOLWINDOW;
[/CODE]
Buthrakaur (61)|19.9.2005 13:07
takze jeste doplnim z konverzace s RSteinem...

operacni system postupuje pri nedostatku pameti tak, ze napred posle aplikaci zpravu WM_HIBERNATE (aplikace by mela uvolnit maximum pameti, ale nemusi se jeste ukoncovat - v CF by se mel automaticky volat GC.Collect()), pokud je pameti jeste mene, posila zpravu WM_CLOSE - aplikace by mela ulozit svuj stav a zavrit se...

tyto zpravy by se mely dat odchytit pomoci MessageFilter, ktery se nastavi v ApplicationEx (obe tridy z OpenNetCF)... zatim jsem to ale nestihl vyzkouset - az vyzkosim, tak napisu dalsi report ;)