vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

Fortgeschrittene Programmierung
Re: Stack abbrechen 
Autor: quickmic
Datum: 21.11.07 12:26

"DoEvents ist dafür da, die Kontrolle ans Betriebssystem zurück zu geben, um asynchrone Ereignisse wie Maus- und TastaturEvents zu verarbeiten" ... Leuchtet ein. Darum geht auch die Timer-Methode, weil das Timer-Event vom OS kommt.

Dein Bsp klappt auch bei mir, aber eben leider genau wie ich es nicht brauchen kann.
Warum das ganze mit dem Doevents nicht klappen kann, ist mir nun auch klar. Sowas in die Richtung hab ich ja bereits vermutet.

Leider bin ich jetzt etwas ratlos...
Du meinst entweder Code (Timer) ändern, oder Threads machen.

"Besser auslagern in eine Sub/Funktion. Du kannst ja nun noch ein Flag setzen, dass TestStack oder hier test es gemacht hat und dann entsprechend den Code ablaufen lassen."

Der Code steht natürlich bereits in einer Sub/Function drin, aber er wird von mehreren Stellen im Code und immer wieder in etwas modifizierter Form, benötigt. Ich kann da also keinen Timer einbauen, der mir nach Schema F den 2.Teil des Codes ausführt.
Ausserdem wird das ganze dann unglaublich unübersichtlich und hässlich.
z.b.

Einmal benötige ich einen Stack bei den SQL-Kommandos-Unterprogramm (Da sind dann die Auswahlfilter drin). Das kann z.b. mehrere Sek dauern bis die Recordsets geladen sind, und 2. Beim Füllen des Flexgrids, was wieder einige Sek dauern kann.
Ich kann daher eigentlich die Timer-Methode schon nahezu ausschliessen.
Bleibt also noch die Methode mit den Threads.

Leider erinnere ich mich mit Grauen an den letzten Versuch mit VB Threads hinzubekommen. Diese Methode möchte ich daher nur im Absoluten Notfall einsetzen.

Ich möchte aber nochmal vielleicht auf die Klassenmodul-Methode zurückkommen, die ich am Anfang kurz erwähnt hab.
Vielleicht ist ja mit diesem Weg mehr anzufangen, zumindest hatte ich bis jetzt den "grössten" Erfolg mit diesem Code:

Im Form1:

Option Explicit
Private class1() As class1
Private counter As Integer
 
Private Sub Command1_Click()
    If (Not Not class1) <> 0 Then 'Array dimensioniert?
        class1(0).cancel
        Set class1(0) = Nothing
        Erase class1
        ReDim class1(0)
        Set class1(0) = New class1
        class1(0).Stacktest
    Else
        ReDim class1(0)
        Set class1(0) = New class1
        class1(0).Stacktest
        Set class1(0) = Nothing
        Erase class1
    End If
 
    MsgBox "Durchlauf fertig"
End Sub
Im Class1:

Option Explicit
Private cancelflag As Boolean
Private RunnningFlag As Boolean
Public Sub cancel()
    cancelflag = True
End Sub
 
Public Sub Stacktest()
    Dim i As Long
 
    RunnningFlag = True
 
    For i = 0 To 10000
        Form1.Label1 = Str(i)
 
        DoEvents
 
        If cancelflag Then
            cancelflag = False
            Exit For
        End If
    Next
 
    RunnningFlag = False
End Sub
Das Problem hier ist, dass zwar "Stacktest" im Klassenmodul abgebrochen (ich würde eher sagen abgewürgt) wird, aber das 1.Button-Event nicht sofort beim abwürgen beendet wird.
Kann man da noch was optimieren, oder bleibt wirklich nur der Weg mit den Threads?

mfg
quickmic
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Stack abbrechen796quickmic20.11.07 12:33
Re: Stack abbrechen448Dirk20.11.07 13:47
Re: Stack abbrechen507quickmic20.11.07 14:01
Re: Stack abbrechen478Zardoz21.11.07 00:15
Re: Stack abbrechen456quickmic21.11.07 08:20
Re: Stack abbrechen451Dirk21.11.07 11:17
Re: Stack abbrechen538quickmic21.11.07 12:26

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-2024 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