/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
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


Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste