|
| App.PrevInstance Fra : Anton Vestergaard |
Dato : 28-11-00 09:58 |
|
Hej
For at undgå flere versioner af et program på min maskine tjekker jeg
App.PrevInstance og hvis den er True laver jeg en Unload Me.
Dette resulterer i at der startes en ny Instance af min applikation, der
ikke
er synlig, men bruger en masse ressourcer!
Nogen der kender til fænomenet? Og en WorkAround?
mvh
Anton
| |
Tomas Christiansen (28-11-2000)
| Kommentar Fra : Tomas Christiansen |
Dato : 28-11-00 12:37 |
|
Anton Vestergaard skrev:
> For at undgå flere versioner af et program på min maskine tjekker jeg
> App.PrevInstance og hvis den er True laver jeg en Unload Me.
Det lyder særdeles fornuftigt.
Hvor i din kode checker du App.PrevInstance?
Det bør jo nok ske så tidligt som overhovedet muligt i opstarten af
programmet.
> Dette resulterer i at der startes en ny Instance af min applikation, der
> ikke er synlig, men bruger en masse ressourcer!
> Nogen der kender til fænomenet? Og en WorkAround?
Et generelt problem med VB er, at en applikation først unloades helt, når
alle ressourcer er frigivet.
Eksempel: Hvis du har to forms loaded (den ene kunne vi jo sige er usynlig),
unloader din applikation først, når BEGGE forms er blevet unloaded.
Andet eksempel: Du har kun én form, men den opretter en cirkulær liste af
objekter. Når formen unloades, bliver programmet IKKE unloadet, idet VB ikke
kan finde ud af pr. automatisk at frigøre en cirklulær liste af objekter. Du
er nødt til selv at bryde kæde (listen), så den ikke er cirkulær, eller evt.
at nedægge den helt selv.
Mon ikke det er noget i den stil, som du er kommet ud i?
Prøv evt. at forsøge at bruge End i stedet for Unload. Hvis det virker, er
jeg 99,375% sikker på, at dit problem er noget i stil med det ovenfor
beskrevne. OBS: Jeg fraråder normal kraftigt brugen af End, som kan have
uoverskuelige konsekvenser - ikke mindst, hvis man er flere
mennesker/grupper, som arbejder på det samme projekt, idet End afbryder
programmet her-og-nu, så efterfølgende Unload og Terminate events ikke
bliver udført.
-------
Tomas
| |
Anton Vestergaard (28-11-2000)
| Kommentar Fra : Anton Vestergaard |
Dato : 28-11-00 15:55 |
|
Hej Tomas
Tak for dit gode svar.
Jeg tjekker så tidligt som muligt, nemlig som første linje i Form_Load,
Form_Initialize kan
ikke unloade formen (har jeg lige fundet ud af!), hvorfor jeg ikke bruger
den.
Dit forslag med End virker helt genialt, men jeg er ikke så vild efter at
bruge den, det
må jeg lige overveje lidt mere.
Lige et spørgsmål til:
Cirkulære referencer?
Det jeg laver er at hente settings fra registry (API), sætte min form op
(resize event),
hente data via ADO og indsætte dem i formen, lave noget statusbar halløj
(API), og så bare vente
på at brugeren kaster sig over programmet. I Query_Unload gemmer jeg
settings til registry.
Jeg har prøvet det der med at det ene Event kalder et andet Event der kalder
det første Event igen, men jeg
tror ikke det sker her.
Tak for hjælpen skal du ihvertfald have.
mvh
Anton
--//SNIP
| |
Mads Andreasen (28-11-2000)
| Kommentar Fra : Mads Andreasen |
Dato : 28-11-00 17:11 |
|
"Anton Vestergaard" <anton_dk_NONO@hotmail.com> wrote in message
news:900gs0$ej1$1@news.inet.tele.dk...
> Hej Tomas
> Tak for dit gode svar.
> Jeg tjekker så tidligt som muligt, nemlig som første linje i Form_Load,
> Form_Initialize kan
> ikke unloade formen (har jeg lige fundet ud af!), hvorfor jeg ikke bruger
[...]
>
>
>
Hejsa
Hvorfor ikke starte programmet i Sub Main()?
Start med at checke app.previnstance og så kan du lukke programmet inden
nogen forms er loadet?
--
-Mads
---------------------------------------
man@aub.dk
ICQ: 17528869
EmbedIT website: http://www.aub.dk/~man
| |
Anton Vestergaard (28-11-2000)
| Kommentar Fra : Anton Vestergaard |
Dato : 28-11-00 23:09 |
|
Hej
Ærbødigst tak må jeg vist hellere sige.
Nu har jeg lavet VBA så længe at jeg helt har glemt VB.
Tak for 'refreshen' af min hukommelse, sub Main er jo det rigtige sted,
så kan jeg jo også lave mine Splash screens på en rigtig måde osv.
Tak.
mvh
Anton
"Mads Andreasen" <man@aub.dk> skrev i en meddelelse
news:WNQU5.12073$zs.326467@twister.sunsite.auc.dk...
>
> "Anton Vestergaard" <anton_dk_NONO@hotmail.com> wrote in message
> news:900gs0$ej1$1@news.inet.tele.dk...
> > Hej Tomas
> > Tak for dit gode svar.
> > Jeg tjekker så tidligt som muligt, nemlig som første linje i Form_Load,
> > Form_Initialize kan
> > ikke unloade formen (har jeg lige fundet ud af!), hvorfor jeg ikke
bruger
> [...]
> >
> >
> >
>
> Hejsa
> Hvorfor ikke starte programmet i Sub Main()?
> Start med at checke app.previnstance og så kan du lukke programmet inden
> nogen forms er loadet?
>
>
> --
> -Mads
> ---------------------------------------
> man@aub.dk
> ICQ: 17528869
> EmbedIT website: http://www.aub.dk/~man
>
>
>
| |
preben nielsen (28-11-2000)
| Kommentar Fra : preben nielsen |
Dato : 28-11-00 17:14 |
|
"Anton Vestergaard" <anton_dk_NONO@hotmail.com> skrev i en meddelelse
news:8vvruf$kpn$1@news.inet.tele.dk...
> For at undgå flere versioner af et program på min maskine tjekker
jeg
> App.PrevInstance og hvis den er True laver jeg en Unload Me.
Jeg gør altid det at jeg sætter Startup Object (under properties) til
"Sub Main" istedet for en Form. Så kan jeg checke f.eks.
App.PrevInstance og evt. helt undlade at loade nogen form. Det er IMHO
langt mere elegant. I stil med dette:
Sub Main()
If App.PrevInstance Then Exit Sub
frmMain.Hide ' Load
hoved-vinduet, men vis det ikke !
< initialiser frmMain m.v. >
frmMain.Show ' Vis
hoved-vinduet, som nu er sat op
End Sub
--
/\ preben nielsen
\/\ prel@post.tele.dk
| |
|
|