Ändern des Backgroundimage zur Laufzeit (halbes Bild)

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Seiyuuki.

    Ändern des Backgroundimage zur Laufzeit (halbes Bild)

    Hallo zusammen,

    ich hoffe, ihr könnt mir helfen. Leider werde ich einfach nicht schlau aus dem Problem.
    Da das Problem zwar immer wieder auftaucht (bei meinem Programm), es jedoch nicht auf Befehl reproduzierbar ist, hoffe ich einer von euch kennt so etwas oder hat einen Gedankenblitz.

    Bescheibung des Programms:
    Per UDP bekomme ich von einem anderen PC einen Befehl geschickt. Den String werte ich aus.
    Wenn der Befehl zum anzeigen des Bildes kommt, wird einem separaten Form (als Klasse angesprochen) das Bild zugewiesen (BackGroundImage Fromfile) und anschließend das Form angezeigt.

    Code:
    Im Hauptform:

    VB.NET-Quellcode

    1. Select Case Parameter
    2. Case 1
    3. Pic = Bild1
    4. Case 2
    5. Pic = Bild2
    6. Case 3
    7. Pic = Bild3
    8. Case Else
    9. Pic = Bild1
    10. End Select
    11. p.Pic(Pic)
    12. p.Show()

    Im separaten Form:

    VB.NET-Quellcode

    1. Public Class frmShowPicsSub Pic(ByVal Datei As String)
    2. Fullscreen()Me.BackgroundImage = System.Drawing.Image.FromFile(Datei)System.Drawing.Image.FromFile(Datei).Dispose()
    3.  
    4. End SubSub Fullscreen()
    5. With Me
    6. .MaximizeBox = False
    7. .MinimizeBox = False
    8. .TopMost = False
    9. .FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    10. .WindowState = System.Windows.Forms.FormWindowState.Maximized
    11. End With
    12. End Sub
    13. End Class


    Problem:
    Eine Zeitlang fuktioniert die Anzeige des Forms mit dem geänderten Hintergrundbild einwandfrei.
    Nach einiger Zeit wir das Bild jedoch nur noch zur Hälfte (mehr oder weniger)angezeigt.
    Als würde ds Progamm das Bild zeichnen und sich dann wegen irgendwas aufhängen.
    Wird dann ein anderer Befehl gesendet, geht es zwar dann weiter (das Programm), aber ab und zu ist dann bei der Bildanzeige wieder nur ein unvollständiges Bild zu sehen.

    Da es erst nach einer Weile auftritt und ich es einfach nicht reproduzieren kann, weiß ich nicht woran es liegt.
    Auf dem PC, auf dem das Programm ausgeführt wird, ist auch keine Entwicklungsumgebung installiert. Ich kann also nicht in den Debug und dort schauen wo es hängen bleibt.
    Eine Vermutung war, dass der Cache einfach irgendwann voll ist.
    Ich hatte gehofft, dass Problem liese sich mit

    VB.NET-Quellcode

    1. System.Drawing.Image.FromFile(Datei).Dispose()

    lösen, es hat aber leider nichts gebracht.

    Hat jemadn von Euch eine Idee?
    Ich brauche dringend Hilfe!

    Vielen lieben Dank!

    Mit freundlichen Grüßen
    Seiyuuki
    Ich tippe mal darauf, dass Dir der Arbeitsspeicher ausgeht.
    Öffne mal den Taskmanager und schau auf die Arbeitsspeicherauslastung, wärend das Programm läuft.

    Hier ist das Problem:

    VB.NET-Quellcode

    1. Me.BackgroundImage = System.Drawing.Image.FromFile(Datei)
    2. System.Drawing.Image.FromFile(Datei).Dispose()

    Da ist das obere System.Drawing.Image.FromFile(Datei) nicht das selbe Objekt, wie das untere. Es wird zweimal separat das Bild aus der Datei ausgelesen.
    Mach das anders:

    VB.NET-Quellcode

    1. If Not Me.BackgroundImage Is Nothing Then
    2. Me.BackgroundImage.Dispose() 'Falls ein Bild drin ist, dieses verwerfen, um den Speicher frei zu geben.
    3. End If
    4. Me.BackgroundImage = System.Drawing.Image.FromFile(Datei)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Da die Pakete nur auf Tastendruck geschickt werden, ist die Reihenfolge kein Problem.
    Allerdings muss ich zugeben, dass ich zum ersten Mal überhaupt etwas mit UDP mache.
    Dementsprechend habe ich keine Ahnung was ein Handshake Protokoll ist. (ich google mal....)

    Vielen Dank für den Hinweis.
    Ich lerne gerne dazu.

    Problem noch aktuell

    Trotz dem hilfreichen Tipp von Niko Ortner hat sich leider nichts gebessert. ;(
    Das Phänomen tritt sporadisch auf und ist nicht gezielt reproduzierbar.

    Ein Detail habe ich noch vergessen zu erwähnen. Es wird auf einem 46" Monitor angezeigt mit 1920x1080 Pixel.

    Handshake Protocol habe ich übrigens doch drin.

    Danke nochmals für eure Hilfe!
    (bin schon echt am verzweifeln. Es ist halt für eine Messe, also sehr wichtig!)
    Wenn ich das mit dem Handshake richtig verstanden habe (was ich nicht beschwören würde), dann habe ich das drin.
    Was sich bei mir aber nur dadurch kundtut, das mein Programm dem Sender zurückschickt, dass es den Befehl erhalten hat.

    Ich gebe ja die Strings in einer Console aus, die ich empfange. Das was ankommt stimmt schon.
    Der Fehler liegt irgendwo in meinem Programm selbst.