Laden...

Threading in einer Schleife?

Erstellt von ZeroQool vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.411 Views
Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 16 Jahren
Threading in einer Schleife?

Hallo, habe irgendwie Anlaufprobleme u hoffe auf einen Denkanstoss von euch 🙂

Ich habe eine CheckBox u wenn diese angeklickt möchte ich das eine While Schleife in der ein Thread ausgeführt solange läuft bis die CheckBox wieder deaktiviert wird, aber will nicht so wirklich

Hier in dem Bsp. habe ich es in dem ChangedEreignis der CHB, aber glaube so wirklich richtig ist das nicht.....

while(true)
{
            Thread ThreadNeu_Import_VA = new Thread(new ThreadStart(Neu_Import_VA));
            ThreadNeu_Import_VA.Start();
}

Ohne while Schleife gehts problemlos...danke im voraus

M
190 Beiträge seit 2007
vor 16 Jahren

Was genau willst du denn erreichen, das versteh ich noch nicht so ganz muss ich gestehen.

Hier in der Schleife wird ja jetzt der Thread nicht solange ausgeführt, wie die Schleiße läuft. Es wird mit jedem Schleifendurchgang ein neuer Thread erzeugt.

Kannst du das vielleicht ein bischen besser beschreiben?

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 16 Jahren

Es handelt sich hierbei im ein Importtool...mit der Prozedur "Neu_Import_VA" werden bestimmte Sachen vom FTP importiert und Logs speichert.

Das ganze soll durch eine Checkbox gestartet werden u so lange diese aktiviert ist soll der Thread ständig immer wieder neu gestartet werden, weil sich der Inhalt auf dem FTP ständig ändert bzw es kommen neue Daten hinzu

M
190 Beiträge seit 2007
vor 16 Jahren

du könntest vielleicht einfacher sagen:


        private void checkBox1_CheckStateChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
                DeinThread.start();
            else
                DeinThread.suspend();

        }

In dem Thread läuft dann eine Schleife die da nachschaut.

Hilft das?

2.223 Beiträge seit 2005
vor 16 Jahren

Hallo ZeroQool,

Ich denke nicht das es das ist, was Du willst

Durch diese While schleife würden immer wieder neue thread object erzeugt und auch ausgeführt

Das was du vorhast würde ohne schleife Funktionieren

Du brauchst nur eine if abfrage

das Thread Object wird Global erzeugt

in dem Event brauchst du dann nur



if (((CheckBox)sender).Checked){
            ThreadNeu_Import_VA.Start();
}else{
            ThreadNeu_Import_VA.Abort();
}


mfg

M
190 Beiträge seit 2007
vor 16 Jahren

Öh ja das meinte ich doch.
Mit da nachschaut war dann die Importfunktion vom FTP gemeint

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 16 Jahren

Ah, danke....Wollte gerade das Objekt global erzeugen


namespace eBayAPI_Server
{
  public partial class frm_eBayDatenuebergabe : Form
  {
Thread ThreadNeu_Import_VA = new Thread(new ThreadStart(Neu_Import_VA));
.
.
.
.}
}


Fehlermeldung:

Fehler 1 Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "eBayAPI_Server.frm_eBayDatenuebergabe.Neu_Import_VA()" verweisen. ....

Mein Befehl ist doch eignetlich richtig?!

K
79 Beiträge seit 2006
vor 16 Jahren

Initialisier die Variable global also:

Thread ThreadNeu_Import_VA = null;

und vor deiner Schleife oder bei deiner OnLoad oder wie auch (Konstruktor deiner Form bzw. Klasse) immer deklarierst du den Thread mit:

ThreadNeu_Import_VA = new Thread(new ThreadStart(Neu_Import_VA));

So sollte es gehen.

Zum Zeitpunkt, wo du deinen Thread initialisierst ist die Funktion Neu_Import_VA noch nicht bekannt. Darum erst initialisieren und später deklarieren.

183 Beiträge seit 2004
vor 16 Jahren

@Killerhase:
<klugscheiss>

Original von Killerhase
Initialisier die Variable global also:

Thread ThreadNeu_Import_VA = null;  

Genau genommen ist das die Deklaration und die Initialisierung des Wertes der Variable mit 'null' in einem.

Original von Killerhase
und vor deiner Schleife oder bei deiner OnLoad oder wie auch (Konstruktor deiner Form bzw. Klasse) immer deklarierst du den Thread mit:

ThreadNeu_Import_VA = new Thread(new ThreadStart(Neu_Import_VA));  

Ist nun eigentlich nur ne neue Wertzuweisung!

Original von Killerhase
Darum erst initialisieren und später deklarieren.

Genau genommen isses andersrum 😁

</klugscheiß>

Aber wir wollen ja nicht Klugscheißen 8)

Ansonsten sollte es aber so funktionieren 👍

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

K
79 Beiträge seit 2006
vor 16 Jahren

Ups

*im Loch verkriech*

wie Recht er doch hat 😉

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 16 Jahren

Funktioniert perfekt. THX an alle!