Thread läuft nicht richtig

JJB

Cogito ergo brumm
Tachtach !

Ist jetzt keine allzu genaue Überschrift.

Ich hab einen Thread ganz normal erzeugt und gestartet um eine Schleife parallel zum normalen Ablauf zu durchlaufen.
Es handelt sich hierbei um einen Statusscrollerbalken.

Thread aThread;
aThread = new Thread(new ThreadStart(aScrollFunction));
aThread.Start();

Nur läuft die Schleife im Thread nicht parallel zum Rest des Programms. Er empfängt zwar seinen Startaufruf beginnt aber so spät, dass der Rest des Programms eigentlich schon komplett abgelaufen ist.

Ich hab mir gedacht, es könnte daran liegen, dass der Thread, während das Programm auf Dateien zugreift, einfach nicht arbeitet. Jedoch habe ich das selbe Problem, wenn das Programm einfach mal 999999 eine hohle Schleife durchläuft. Der Thread steht währenddessen. Und erst wenn das Programm schließt (und somit der Thread auch aufhört zu existieren) ist der Thread bereit etwas zu tun.

Gibt es eine Möglichkeit den Thread zu zwingen parallel zum Programm zu laufen ?

MFG JJB

_
 
Hi.

Könntest vielleicht ein bisserl mehr Code zeigen, sodass wir uns ein wenig mehr ein Bild von der ganzen Situation machen können.

MfG,
Alex
 
Nichts großes, einfach nur:

Code:
      private  Thread  itsScroller;

      private void SetScroller(Boolean theMode)
      {
         if(theMode)
         {
            itsProgress = true;
            itsScroller = new Thread(new ThreadStart(RunScroller));
            itsScroller.Start();
         }
         else
            itsProgress = false;
      }

      private void RunScroller()
      {
         while(itsProgress)
         {
            if(aFunction())
               ProgressScrollBar.PerformStep
            if(ProgressScrollBar.Value >= 100)
               ProgressScrollBar.Value -= 100;
            Thread.Sleep(5);
         }

         ProgressScrollBar.Value = 0;
      }

Aber im Thread tut sich nichts, während das Programm läuft.
Erst wenn der Programmablauf durch eine Messagebox pausiert läuft der Thread. Ansonsten wartet er.
Kann man das nicht irgendwie ineinander verzahnen ? Stichwort "synchronize" ?
Das selbe gibt es doch für Deadlocks in Ressourcenbelegungen oder Multithreading in Microcontrollern und Multiprozessorsystemen.

MFG JJB

_
 
Der Benutzer arbeitet an der Oberfläche, an welcher diverse Funktionen ausgeführt werden. Manche davon von längerer Dauer.
In dieser Zeit soll mit SetScroller ein Statusbalken angezegit werden. Dieser läuft natürlich parallel als Thread. In aFunction ist lediglich ein Boolsches Feedback, ob bereits ein weiterer Step bereit ist.

Der Balken bewegt sich aber nur, solange im Hauptprogramm nichts getan wird. Wenn es wie gesagt durch anzeigen einer Messagebox im Wartezustand ist, beginnt der Balken (Schleife in RunScroller) zu arbeiten und hält sofort an, wenn das Hauptprogramm weiter läuft.

Das muß doch irgendwie parallel funktionieren können ?!
Wozu habe ich sonst Threads.

MFG JJB

_
 
Also der Thread wird wohl trotzdem weiterlaufen, wieso sollte er das nicht? Vielleicht setzt auch einfach dein "itsProgress" falsch.

Eine andere Möglichkeit wäre, dass er deine Scrollbar einfach nicht aktualisiert während er durch andere Arbeiten beschäftigt ist. UND was noch dazukommt, vielleicht solltest die Aufgaben, die zu erledigen sind, auch in einem Thread (also nicht dem MainThread der Anwendung) ablaufen lassen ...
 
Im Hauptprogramm laufen Prozesse und externe Aufrufe. Kann sein, dass diese den Thread verlangsamen, aber dass er komplett stehen bleibt....
Er arbeitet wirklich nur weiter wenn das Hauptprogramm steht. Sonst läuft nicht mal eine Zeile.

_
 

Neue Beiträge

Zurück