vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Handle einer Bitmap 
Autor: Dilbert
Datum: 28.09.13 16:28

Hi,

ich habe ein Problem mit dem Handle einer Bitmap.

Die Bitmap soll zu einem Icon konvertiert werden.
Dazu rufe ich bmp.GetHicon auf und füttere System.Drawing.Icon.FromHandle damit.
(Vielleicht gibt es ja hier schon einen eleganteren Ansatz?)
Der Code funzt Prima und ist erstaunlich performant!

Mein Problem ist aber, das nach genau 3317 Durchgängen eine "allgemeine GDI+ Fehlermeldung" erscheint.

Was bisher geschah:
Da dieser Wert recht konstant war, dachte ich an diverse Überläufe und habe erstmal alles aus dieser Prozedur "Disposed".
Auch GC.Collect, Application.Doevents und ähnliche Verzweiflungstaten blieben wirkungslos.
Weiterhin habe ich den Timer langsamer gestellt, was das Problem nur verzögerte, nach 3317 durchläufen war es wieder da.
Das System rückt also das Handle nicht so oft raus?
OK, also Zeile 15 (iptr = bmp.GetHicon) ins Form-Load verschoben. Es stürzt nicht mehr ab, aber das Icon wird leider auch nicht mehr aktualisiert.

Also:
Wo mache ich den Denkfehler?
Verstehe ich bei den Handles was nicht?
Bisher dachte ich, das Handle auf die BMP (das ja global definiert ist) wäre immer das Gleiche und im Form-Load sollte ein einzelner Aufruf genügen um das Handle zu bekommen...

Ich habe den Code mal auf's Nötigste reduziert und abgespeckt um das Problem deutlich zu machen:

Public Class Form1
    Dim NotifyIcon1 As New NotifyIcon
    Dim bmp As New Bitmap(16, 16, _
      System.Drawing.Imaging.PixelFormat.Format24bppRgb)
    Dim iptr As System.IntPtr
    Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles _
      Me.Shown
        NotifyIcon1.Visible = True
    End Sub
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) _
      Handles Timer1.Tick
        Static Z = 0
        Dim BH As New SolidBrush(Color.LightGray)
        Dim BF As New SolidBrush(Color.Black)
        Dim g As Graphics = Graphics.FromImage(bmp)
        g.FillRectangle(BH, 0, 0, 15, 15)
        g.DrawString(Rnd() * 10, Me.Font, BF, 0, 0)
        iptr = bmp.GetHicon()
        NotifyIcon1.Icon = System.Drawing.Icon.FromHandle(iptr)
        g.Dispose()
        BH.Dispose()
        BF.Dispose()
        Z += 1
    End Sub
End Class
Z ist nur zum Mitzählen der Durchgänge gedacht...
Hat jemand dafür eine Erklärung?
Und womöglich sogar 'ne Lösung?

Dilbert

--
while (!asleep()) sheep++;

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Handle einer Bitmap1.472Dilbert28.09.13 16:28
Re: Handle einer Bitmap970Manfred X28.09.13 16:35
Re: Handle einer Bitmap924Dilbert28.09.13 16:44
Re: Handle einer Bitmap916Manfred X28.09.13 16:46
Re: Handle einer Bitmap852Dilbert28.09.13 16:52
Re: Handle einer Bitmap901Manfred X28.09.13 17:10
Re: Handle einer Bitmap961Dilbert28.09.13 17:29
Re: Handle einer Bitmap855ModeratorFZelle29.09.13 12:21
Re: Handle einer Bitmap827Dilbert29.09.13 17:56
Re: Handle einer Bitmap865Manfred X30.09.13 00:52
Re: Handle einer Bitmap839ModeratorFZelle30.09.13 12:09
Re: Handle einer Bitmap811Dilbert30.09.13 19:30
Re: Handle einer Bitmap814Manfred X30.09.13 20:06
Re: Handle einer Bitmap900Dilbert30.09.13 20:23
Re: Handle einer Bitmap886Blackbox30.09.13 20:51
Re: Handle einer Bitmap818Dilbert30.09.13 20:59
Re: Handle einer Bitmap793Manfred X30.09.13 21:10
Re: Handle einer Bitmap856Dilbert30.09.13 21:18
Re: Handle einer Bitmap818Manfred X30.09.13 21:20
Re: Handle einer Bitmap787Dilbert30.09.13 21:24
Re: Handle einer Bitmap837Manfred X30.09.13 21:32
Re: Handle einer Bitmap848Blackbox30.09.13 21:24

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel