Schliesen eines laufendes subs

  • VB.NET

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

    Schliesen eines laufendes subs

    hey leute ^^


    ich suche nach ner lösung wie ich über

    Sub a()

    Sub b()

    killen kann

    gibts sowas überhaupt? *g*

    danke schonmal im vorraus für eure unterstützung


    liebe grüße

    Datsspeed :thumbsup:

    VB.NET-Quellcode

    1. Class Form2
    2. Sub a(Byval wert as String)
    3. 'hier erstelle ich eine Datei und warte dann eine halbe minute bis eine antwortdatei von einem anderen rechner kommt
    4. 'fals die antwortdatei nicht kommt kommt eine msgbox mit einem error
    5. 'die msgbox taucht dann auf wenn die form geschlossen ist wenn ich zuvor auf X gedrückt habe....
    6. 'und dann habe ich die Fehlermeldungsmsgbox bei der anderen form ...
    7. end sub
    8. Private Sub MyForm_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    9. me.visible = false
    10. form1.visible = true
    11. 'Kill sub a
    12. End Sub
    13. end Class



    hoffe des ist so verständlich genug

    lg datsspeed
    Wenn die eine Sub in einem separaten Thread läuft, kannst Du diesen z.B. per Button-Klick beenden.
    Oder so:

    Quellcode

    1. Protected ExitSub As Boolean = False
    2. Sub Fkt1()
    3. Do
    4. If(ExitSub) Then
    5. Exit Sub
    6. End If
    7. Application.DoEvents() ' Ganz wichtig !!!
    8. Loop
    9. End Sub
    10. Sub Btn_Click(...) Handles ...
    11. ExitSub = True
    12. End Sub
    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!
    Wenn er halbe Minute wartet wird er wohl Thread.Sleep() nutzen, hoffe ich doch mal.

    Es muss ein Thread oder BG-Worker sein, beides kannst du einfach Beenden, den Thread stoppst du mit DeinThread.Stop() und BG_Worker mit bg.CancelASync() oder so ähnlich.
    sprich wenn ich statt Form2.a alleine anzustarten muss ich einfach in sub a nen thread anstarten den ich dann im myclosing event büber thread.stop beenden kann ?

    test ich gleich mal danke für eure zeit / hilfe

    lg
    Nunja, wenn du keinen extra Thread hast kann Sub b() gar nicht ausgeführt werden wenn sub a() noch läuft, weil dann alles nacheinander abgearbeitet wird. Heißt wenn in sub a() ein Sleept() hast friert die ganze Anwendung ein, da der aktuelle Thread halt im Schlafmodus ist. Somit würde auch das OnClosing nicht ausgeführt werden und Windows meldet "Keine Rückantwort".
    ja ich benutzte aber nicht das threading sleep ^^ sondern den

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


    *g*


    naja deine lösung geht aufjedenfall nicht da threading.stop nicht exsestiert :/

    lg
    Ne so funzt das auch nicht

    Du machst neuen Thread

    VB.NET-Quellcode

    1. Private Sub a()
    2. Threading.Sleep(50000)
    3. End Sub
    4. Private Sub b()
    5. Dim t1 As New Thread(AdressOf A)
    6. t1.Start()
    7. ' bla bla mache was
    8. t1.Stop()
    9. End Sub


    Auch wenn die API nutzt wird denke ich der Thread eingefrohren, weil du ja warten willst und der Code der danach kommt soll ja erst nach Ablauf ausgeführt werden.
    deins ist die VB 6(und älter) dekleration, As Long->As Integer, sonst könntest du bei zu hohen Zahlen ärger bekommen :P
    Aber ansonsten ist Threading.Thread.Sleep zu empfehlen, da du dann die Dekleration nicht mehr brauchst, es etwas übersichtlicher wird und es sowiso Managed ist(ist da aber natürlich nicht schwer^^)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---