Toon posts:

[.NET] Forms scherm opbouwsnelheid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste devvers,

In VB.NET heb ik een applicatie geschreven waar de forms een backimage hebben en waar op elke form ook een aantal pictureboxes zitten. Alle controls zijn bij het opstarten van de applicatie voorzien van images. Sommige pictureboxes krijgen later afhankelijk van de input van de gebruikt andere images.

De backimages zijn projectresource files, de images in de picture boxes zijn local resources.

Probleem is dat bij het aanroepen van de .show method bij een form je de hele form eigenlijk picturebox voor picturebox opgebouwd ziet worden. Daarnaast wordt het beeld eerst een paar ms seconden wit voor de nieuwe backimage van de nieuwe form die vertoond geladen is.

Is er een manier om de forms te laten "prerenderen" zodat ze in hun geheel op het scherm komen en de opbouw niet te zien is?

Verwijderd

Double buffering van je form aanzetten zal al een hoop schelen, maar het renderen van een form met veel of lastige controls is in .NET altijd langzamer dan in native Win32 is mijn ervaring.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
pictureboxen zijn traag

je kan beter zelf de plaatjes inladen en tekenen.

This message was sent on 100% recyclable electrons.


Verwijderd

Topicstarter
BasieP schreef op donderdag 17 mei 2007 @ 19:16:
pictureboxen zijn traag

je kan beter zelf de plaatjes inladen en tekenen.
En dan de hele app herschrijven zeker :-D.

Is er geen manier om picture te "preloaden". Het is een embedded app, en het hele systeem draaid om die app dus geheugen gebruik is geen issue.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Misschien kun je eens kijken naar BeginUpdate en dergelijke functies.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op donderdag 17 mei 2007 @ 20:53:
Misschien kun je eens kijken naar BeginUpdate en dergelijke functies.
Die method ondersteund het PB object niet. Zelf painten is geen optie, het is een soort SCADA achtige toepassing die heel veel PB controls heeft met click evens enzo, zou een heel gedoe worden. Of ik moet de PB's laten staan, zonder image, backcolor transparant en dan zelf eroverheen / onderdoor painten maar de events van de PB houden, is een optie natuurlijk...

Even brainstormen hoe ik mischien alle forms tegelijkertijd openhoud zodat hij ze niet steeds opnieuw hoeft te openen oid. Nouja meld me wel als ik weer wat verder ben :D.

Verwijderd

Zoek anders 's op LockWindowUpdate of de WM_SETREDRAW message van windows.
In beide gevallen moet je user32.dll van Windows importen, dus 't is niet 100% managed meer, maar misschien heb je er iets aan.

Geen VB, maar misschien toch een nuttig linkje.

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 20-11 21:40

Not Pingu

Dumbass ex machina

Verwijderd schreef op donderdag 17 mei 2007 @ 18:13:
Probleem is dat bij het aanroepen van de .show method bij een form je de hele form eigenlijk picturebox voor picturebox opgebouwd ziet worden. Daarnaast wordt het beeld eerst een paar ms seconden wit voor de nieuwe backimage van de nieuwe form die vertoond geladen is.

Is er een manier om de forms te laten "prerenderen" zodat ze in hun geheel op het scherm komen en de opbouw niet te zien is?
Om het visueel wat minder rommelig te maken kun je de backgroundimage laden in de Form_Init fase. Form_Load loopt zowat gelijk met het moment waarop de form zichtbaar is voor de eindgebruiker.

Geef je de backimage op in het properties panel? Je kunt hem ook handmatig inladen:

C#:
1
this.BackgroundImage = Image.FromFile("background.jpg");



edit:
Winforms hebben natuurlijk geen Init event 8)7

Je zou de backgroundimage ook kunnen setten in de constructor van het form, of in je Main functie (in Program.cs).

[ Voor 9% gewijzigd door Not Pingu op 19-05-2007 20:06 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Topicstarter
Haha ja dat wist ik! Je kunt ze zelfs erin teken met GDI+, wat volgens mij nog sneller is! Maar het probleem is de opbouw snelheid van de form met al zijn objecten te langzaam gaat, de achtergronden zitten er zo in, je ziet dus bij het laden van de form vanalles flitsen, een 0,5 seconde oid.

Het gaat een stuk sneller als ik alle forms gewoon openlaat, ipv ze sluiten hide ik ze gewoon. Voor de toepassing zelf is dat geen probleem aangezien er maar 1 form tegelijkertijd actief is, fullscreen, topmost, alleen vind ik het wat minder netjes.
Pagina: 1