Backgroundworker für MouseMoveEvent

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Backgroundworker für MouseMoveEvent

    Hei,

    Hintergrund
    ===========

    In MouseMove werden CAD-Fangpunkte visualisiert. Z.B. ==> Bewegt sich die Maus auf dem 3D-Model über eine Kante, wird diese Markiert, der Typ fest gestellt ( Line, Arc, Circle, Curve, ..... ) und auf Grund dessen die Fangpunkte visualisiert.
    Sind jetzt komplexe Baugruppen drin, kann das schon mal bis zu 500ms dauern. Bei einzelbauteilen dauert das in der Regel 5-8ms. Hat man jetzt etwas Komplexes und viel nebeneinander liegende Kanten und man fährt mit der Maus schnell über diese Kanten, passiert es ab und zu das sich das Programm aufhängt.
    Ich kann es aber so gut wie nicht debuggen.

    Theoretisch wenn ich das in eine BGW setze müsste ( SOLLTE ) das MouseMove solange ruhegeben bis der BGW meldet das die Funktion abgeschlossen ist?????

    Wie könnte so was im Code-Beispiel ausschauen??

    Beste Grüße
    @DragsTrail Falsche Herangehensweise.
    Ein BGW ist Geschichte, lass ihn ruhen.
    Überleg zunächst, was passieren soll, danach überlegen wir, wie das nebenläufig gemacht oder parallelisiert werden kann.
    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!

    VB.NET-Quellcode

    1. Private Sub ModelView1_MouseMove(sender As Object, e As MouseEventArgs) Handles ModelView1.MouseMove
    2. If e.Button = System.Windows.Forms.MouseButtons.Middle Or e.Button = System.Windows.Forms.MouseButtons.Right Or ModelView1.ToolBars(0).Contains(e.Location) Or ModelView1.ToolBars(1).Contains(e.Location) Or ModelView1.ViewCubeIcon.Contains(e.Location) Then
    3. Return
    4. Else
    5. VisualizeCatchPoints(ModelView1, e.Location)
    6. End If
    7. End Sub


    Aus meiner Sicht würde ich sagen: Solange VisualizeCatchPoints aktiv ist, darf MouseMove nicht feuern! Diese Funktion visualisiert bei der Linie z.B Start-, Mittel- und Endpunkt. Siehe Bild.
    Bilder
    • 2021-05-20 14_15_40-Window.png

      77,45 kB, 1.031×529, 44 mal angesehen
    @DragsTrail Mach das lieber ins MouseDown oder -Up, das ist überschaubar.
    MouseMove kommt beliebig oft und sehr schnell hintereinander.
    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!

    DragsTrail schrieb:

    Solange VisualizeCatchPoints aktiv ist
    Dann mach doch noch ein Flag rein:

    VB.NET-Quellcode

    1. Private IgnoreMouse As Boolean = False
    2. Private Sub ModelView1_MouseMove(sender As Object, e As MouseEventArgs) Handles ModelView1.MouseMove
    3. If IgnoreMouse OrElse e.Button = System.Windows.Forms.MouseButtons.Middle OrElse e.Button = System.Windows.Forms.MouseButtons.Right OrElse ModelView1.ToolBars(0).Contains(e.Location) OrElse ModelView1.ToolBars(1).Contains(e.Location) OrElse ModelView1.ViewCubeIcon.Contains(e.Location) Then Return
    4. IgnoreMouse = True
    5. VisualizeCatchPoints(ModelView1, e.Location)
    6. IgnoreMouse = False
    7. End Sub

    btw: Der Unterschied zwischen And und AndAlso/Or und OrElse
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.