Timer Ersetzen durch Multithreading

CrimeTime89

Mitglied
Hallo,
ich habe im Moment das Problem das mein Timer nicht ganz meinen Befehlen Folgt oder ich einfach was Falsch gemacht habe, ein Freund sagte mir das mit Multithreading das Programm um einiges schneller läuft als mit einem Timer.

Problemstellung in dem Timer:

Der Timer von mir ist zu ständing um eine bestimme Aktion auszuführen, diese Aktion Funktioniert recht gut doch der Harken an der sache ist das wenn diese Aktion durch geführt wurde pausiert die Aktion für mind. 10-15 Sekunden und es passiert garnichts, nach den 10-15Sekunden kommt "Blacklisting TEXT for a while".

ich muss dazu sagen das der Auslöser von dem Timer mehrmal's ausgelöst wird, daher auch totalTime.

der Timer wird ausgelöst wenn bestimmte Bestimmungen gegeben sind z.B. wenn in einer Textbox ein bestimmter Text eingegeben wurde.

hier der Code von dem Timer:

Code:
        private void doCheck_Tick(object sender, EventArgs e)
        {
            if (!imready())
            {

                TimeSpan totalTime = DateTime.Now - time;
                if (totalTime.TotalSeconds < 15)
                {
                            if (TextExist(currentText))
                            {
                                if (!lowercase())
                                {
                                    Thread.Sleep(500);
                                    Interact(currentTextIndex);
                                    doCheck.Interval = 2600;
                                }
                                else
                                {
                                    Interact(currentTextIndex);
                                    doCheck.Interval = 100;
                                }
                            }
                            else
                            {
                            texts++;
                            doCheck.Enabled = false;
                        }
                    }

                }
                else
                {
                    Log.Output(String.Format("Blacklisting {0} for a while.", currentText));
                    blacklist.Add(currentText);
                    doCheck.Enabled = false;
                }
            }

ich wäre auch zufrieden wenn mir jemand das Timer Problem löst.
 
Hallo,

mit einem Timer sollten nur regelmäßig wiederkehrende Aktionen ausgeführt werden.

ich muss dazu sagen das der Auslöser von dem Timer mehrmal's ausgelöst wird, daher auch totalTime.
Was meinst du damit? Rufst du öfter Start() / Stop() auf? Mir ist nicht ganz klar, wofür du denTimer brauchst - kannst du mit dem Auslöser die entsprechende Aktion nicht gleich direkt ausführen?

Gruß
MCoder
 
du musst dir das so vorstellen, es wird immer geprüft ob z.B. der Text Groß geschrieben wurde jedesmal wenn dies der Fall ist wird der Timer Enabled und bekommt ein Interval sprich Zeit zum runterlaufen.

sobald das programm bei doCheck ankommt hat totalTime eine Zeit von mind. 14Sekunden.
 
du musst dir das so vorstellen, es wird immer geprüft ob z.B. der Text Groß geschrieben wurde jedesmal wenn dies der Fall ist wird der Timer Enabled und bekommt ein Interval sprich Zeit zum runterlaufen.
Du willst also auf die entsprechenden Ereignisse zeitverzögert reagieren? Mir ist trotzdem noch nicht ganz klar, wofür der Timer gut ist, also welches Konzept bzw. Idee hinter dieser Verzögerung steckt. Ich denke, die Probleme enstehen dadurch, dass du in den verschiedenen Situationen an den Timer-Parametern drehst.

Gruß
MCoder
 
ich muss darauf etwas verzögert reagieren, aber dies sollte nich länger als 1-2 Sekunden sein aber derzeitig ist die warte Zeit nach dem der Timer einmal ausgelöst wurde 14Sekunden bis er das nechste Ausführt
 
Hi,
ich versteh das Problem so eigentlich auch nicht so ganz.
Du prüfst mittels des Timers ob Buchstaben Groß oder Klein geschrieben wurden.
Wenn ich dich richtig verstanden hab, dann willst du periodisch prüfen, ob der Text anders ist?
Wenn ja, nimm doch einfach das Event Textchanged.

mfg
Wensi
 
sicher könnte ich das nehmen wenn ich dies vorhätte, der Code ist abgeändert er führt in wirklichkeit etwas ganz anderes aus d.h. ist die Funktion die dort beinhaltet ist realativ egal derzeitig, Problem ist das er bei jedem ausgeführten Timer Event jedesmal 14Sekunden Pausiert und dann "Blacklisted" in die Textbox schreibt und dann das nechste in dem doCheck durchführt.
 
Du hast da ja dieses stehen
C#:
if (totalTime.TotalSeconds < 15) { ... } else { Log.Output (...); }
Das heißt der Output wird erst dann geschrieben, wenn 15 Sekunden vorbei sind.
Was meinst du mit "er pausiert 14 Sekunden bei jedem Timer-Event"? Wird das nächste Event erst nach 14 Sekunden aufgerufen oder pausiert/hängt der Code im Timer-Event für 14 Sekunden?
 
sobald der Timer Enabled wird und sein Interval bekommen hat startet er die Funktion im inneren des Timers, er führt diese Funktion Einmal aus und beendet sie, dann Pausiert der Timer 14 Sekunden können aber auch 15 Sekunden sein, dann Schreibt er "Blacklisted" in die Textbox und führt das das nechste in dem Timer aus.

ich tendiere eher dazu das der Code im Timer-Event hängen bleibt die 14 Sekunden.
 

Neue Beiträge

Zurück