Therads - Kann das nicht wirklich

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Therads - Kann das nicht wirklich

    Guten Tag,
    ich habe ein Problem mit Theards. Ich will soetwas verwenden, damit meine Anwendungen nicht anfangen sich aufzuhängen.
    z.B bei Uploads/Downloads Informationen aufsuchen oder bei mir der Fall: BlurEffect.
    Aber leider versteh ich das nicht ganz, wie ich es anwenden soll.
    Kann mir dort jemand helfen und eine Erklärung abgeben? Vielleicht sogar ein Beispiel.

    Danke

    mit freundlichen Grüßen
    PepsiMax



    BlurEffect:

    VB.NET-Quellcode

    1. Sub BlurBitmap(ByRef image As Bitmap, Optional ByVal BlurForce As Integer = 1)
    2. Dim g As Graphics = Graphics.FromImage(image)
    3. Dim att As New ImageAttributes
    4. Dim m As New ColorMatrix
    5. m.Matrix33 = 0.5F
    6. att.SetColorMatrix(m)
    7. For x = -BlurForce To BlurForce
    8. For y = -BlurForce To BlurForce
    9. g.DrawImage(image, New Rectangle(x, y, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, att)
    10. Next
    11. Next
    12. att.Dispose()
    13. g.Dispose()
    14. End Sub
    15. BlurBitmap(Me.BackgroundImage, 5)
    msdn.microsoft.com/en-us/library/hh191443.aspx
    Hier könnte man auch bestimmt Parallelisierung anwenden. Gibt dafür entsprechend performante Algorithmen: oder [C#]: Fast Gaußian Blur
    Müsstest halt 'ne kleine DLL basteln.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ah ok.

    Aber irgendwie hab ich ein Problem!
    Fehlermeldung: "Zusätzliche Informationen: Das Objekt wird bereits an anderer Stelle verwendet."

    Code:

    VB.NET-Quellcode

    1. Private Sub frm_main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ShowDisplay()
    3. neuerthread = New System.Threading.Thread(AddressOf Me.BlurEffectInTheard)
    4. neuerthread.Start()
    5. End Sub
    6. Public Sub BlurEffectInTheard()
    7. BlurBitmap(frm_display.BackgroundImage, 6)
    8. End Sub
    @PepsiMax In welcher Zeile kommt die Meldung?
    Und:
    Pack den Code aus der Form_Load in die Form_Shown, die Form_Load wird bei bestimmten Exceptions ohne Meldung verlassen..
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    mox schrieb:

    VB.NET-Quellcode

    1. Me.CheckForIllegalCrossThreadCalls = False
    Jetzt begibst Du Dich allerdings aufs Abstellgleis.
    Das ist ja schlimmer als Form2.Show().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Versuch mal eine neue Instanz des Hintergrundbildes der Form frm_display zu erstellen und mit dieser zu arbeiten.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim img As Image = Me.BackgroundImage
    2. Dim neuerthread As New System.Threading.Thread(Sub() img = BlurEffectInTheard(img, 1))
    3. neuerthread.Start()
    4. While neuerthread.ThreadState = System.Threading.ThreadState.Running
    5. 'Thread läuft
    6. End While
    7. neuerthread = Nothing
    8. Me.BackgroundImage = img


    VB.NET-Quellcode

    1. Private Function BlurBitmap(img As Image, Optional ByVal blurForce As Integer = 1) As Image
    2. Using g As Graphics = Graphics.FromImage(img)
    3. Using att As New ImageAttributes()
    4. Dim m As New ColorMatrix()
    5. m.Matrix33 = 0.5F
    6. att.SetColorMatrix(m)
    7. For x As Integer = -blurForce To blurForce - 1
    8. For y As Integer = -blurForce To blurForce - 1
    9. g.DrawImage(img, New Rectangle(x, y, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, att)
    10. Next
    11. Next
    12. End Using
    13. End Using
    14. Return img
    15. End Function