Jag försöker "animera" en trayicon och det gör jag helt enkelt genom att växla mellan två ikoner. Problemet är att du för varje gång koden körs skapar en ny ikon utan att slänga den gamla, och eftersom att GDI+ inte är hanterad kod så ligger det på programmeraren att se till att slänga gamla objekt (de slängs iofs om en gc körs på wrapper-klasserna i .net, men du vet inte när..) Jag misstänkte att det var nått sånt fel så jag testade med niUpdate.Icon.Dispose. Jag har ingen aning om det ens är lite rätt, men det löste hur som helst inte problemet. Jag la in ikonerna i resources och laddade dom därifrån och nu fungerar det som det ska. Tack!Animera trayicon
Koden jag använder tillsammans med en NotifyIcon:
<code>
ActiveIcon += 1
If ActiveIcon = 2 Then ActiveIcon = 0
niUpdate.Icon = System.Drawing.Icon.FromHandle(CType(imgIcons.Images(ActiveIcon), Bitmap).GetHicon)
</code>
Ikonerna växlas en gång per sekund precis som dom ska, men efter ett tag (10-30 min) så kraschar programmet. Nått blir fel med grafiken så jag kan inte läsa hela felmeddelandet, men det står nått med GDI+.
Vad kan vara fel? Och hur "ska" man växla ikon?
/ThomasSv: Animera trayicon
En bättre lösning skulle vara att du hade en lista med ikoner också som du skapar antingen vid behov, eller när programmet startas, och låter sedan ligga där. Dvs. du skapar bara ikonerna en gång ifrån din bild istället för varje gång.
En mindre bra, men fungerande, lösning är att du tar den koden du har nu, men ser till att skrota den gamla ikonen också (niUpdate.Icon.) Dock inte bra ur prestanda och optimeringssynpunkt..Sv:Animera trayicon
Ska testa att göra på rätt sätt istället, dvs med en ikonlista. Återkommer.
/ThomasSv:Animera trayicon
/Thomas