Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[.NET] Class met timer, meerdere instanties

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een class aangemaakt (clock.cs) die een timer bevat en om de minuut een clock op de verschillende forms moet setten. Deze classe heb ik static gedeclareerd in Program.cs.
Bij mijn eerste formulier die opgeroepen wordt als het programma start, zet ik het volgende:
C#:
1
Program.clock = new clock();

Hierbij zal de klok beginnen tellen en om de minuut de clock setten.
Wanneer ik ga debuggen en het eerste formulier verschillende keren zal oproepen, dan zal de clock niet om de minuut setten. Hij zal zoveel keer setten in een minuut als zoveel keer het eerste formulier werd opgeroepen.
Dus maakt hij volgens mij telkens op nieuw een nieuwe instantie.

Hoe kan ik eigenlijk het zelfde object aanroepen, zonder telkens een nieuw object te maken van class clock.

  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

Door of maar 1 keer de constructor aan te roepen en de clock in een method te setten, of door een singleton te implementeren.

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Je wil maar één klok hebben, dus kan je hier idd een singleton pattern voor gebruiken.

Dit is trouwens ook een schoolvoorbeeld om gebruik te maken van het observer pattern. (Kan je in .NET implementeren mbhv delegates)

https://fgheysels.github.io/


Verwijderd

Topicstarter
Don Facundo schreef op dinsdag 20 november 2007 @ 10:11:
Door of maar 1 keer de constructor aan te roepen en de clock in een method te setten, of door een singleton te implementeren.
Idd, door maar 1 keer de constructor op te roepen. Maa wanneer precies kan ik dit doen. Wanneer het programma start, moet de constructor aangeroepen worden van clock. Dit is niet mogelijk in Program.cs, want dan krijg ik een null exception wanneer ik een methode ga oproepen in één of ander form.
Dus plaats ik deze bij het eerste form die geopend wordt, maar wanneer ik meerdere keer terug keer naar het eerste form zal idd de constructor meerdere keren worden opgeroepen.
Dit probleem heb ik ook, als ik formulieren ga openen. De formulieren maak ik aan in Program.cs maar de constructor oproepen moet ik nood gedwongen openen in de verschillende formulieren zelf. Hierdoor wordt idd de constructor iedere keer opgeroepen wanneer ik een formulier wil openen en hierdoor zullen er meerdere instances bestaan van eenzelfde formulier of class.

Is dan de oplossing voor dit probleem een singleton?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Waarom kan je dit niet doen bij het starten van je applicatie ?
Wanneer krijg je die NullRefException ? Heb je al eens gedebugged ? Wat gebeurt er precies waarom je die NullRef exception krijgt ?

https://fgheysels.github.io/


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Een voorbeeld implementatie van het observer pattern kun je vinden op
http://www.dofactory.com/Patterns/PatternObserver.aspx

Hier kun je trouwens ook andere design patterns vinden.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
whoami schreef op dinsdag 20 november 2007 @ 10:14:
Je wil maar één klok hebben, dus kan je hier idd een singleton pattern voor gebruiken.

Dit is trouwens ook een schoolvoorbeeld om gebruik te maken van het observer pattern. (Kan je in .NET implementeren mbhv delegates)
Ok prachtig, class clock is aangepast en werkt nu correct!

Lijkt het u verstandig om ook op de formulieren een singleton te maken? Dit zou ik toepassen om zo weinig mogelijk resources te gebruiken en geheugen te sparen. (compact framework)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:17
Een static variabele kun je niet opruimen, dus als iets niet static hoeft te zijn kun je em beter niet static maken, tenzij het geheugengebruik voorspelbaar moet zijn. ( Maar dat zal niet het geval zijn aangezien je in een runtime werkt )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Verwijderd schreef op dinsdag 20 november 2007 @ 11:04:
[...]


Lijkt het u verstandig om ook op de formulieren een singleton te maken? Dit zou ik toepassen om zo weinig mogelijk resources te gebruiken en geheugen te sparen. (compact framework)
:?
Je wil je form een singleton maken ? Waarom ? Heb je daar een goede reden voor (als in: van een form mag er slechts 1 instance zijn).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op dinsdag 20 november 2007 @ 12:23:
[...]

:?
Je wil je form een singleton maken ? Waarom ? Heb je daar een goede reden voor (als in: van een form mag er slechts 1 instance zijn).
Ja idd, toch niet zo'n goeie keuze. Had het getest, maar da zit je met het probleem, dat uw form niet dynamisch mag zijn.
Zou wel nuttig zijn als je slechts iets moet afbeelden of een standaard scherm ofzo
Pagina: 1