2016-04-01 7 views
0

Ich möchte Arbeitslogik über Thread-Pause und Lebenslauf lernen.Multithread Pause und weiter

Thread th=new Thread(start); 
th.Start(); 

public void start() 
{ 
    command_1; 
    command_2; 
    command_3; 

    if(variable_condition) 
     goto Pause; 

    command_4; 
    command_5; 
    command_6; 
    command_7; 

    Pause: 
     pause(); 
} 

private void pause() 
{ 
    th.Suspend(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    th.Resume(); 
} 

Nun, wenn der Befehl, der den Thread startet, fortgesetzt wird?

Befehl_1 oder Befehl_4?

+0

Also, ein [wenig lesen] (https://msdn.microsoft.com/en-us/library/tttdef8x (v = vs.110) .aspx) : "Thread.Suspend und Thread.Resume ... Die Verwendung dieser Methoden wird jedoch nicht empfohlen ... Die Methoden Thread.Suspend und Thread.Resume sind im Allgemeinen nicht für Anwendungen nützlich und sollten nicht mit Synchronisierungsmechanismen verwechselt werden." - Warum lernst du sie gerade? –

+0

Weil ich nicht gut über Multithreading bin. Und ich kenne nur diese Methoden zum Anhalten und Fortsetzen. Wenn solche Methoden, können Sie mir einen Link zu diesen Methoden geben. Ich wäre dankbar –

+0

Verlernen Sie die Verwendung von 'Suspend' und' Resume' und lesen Sie über Synchronisationsobjekte wie Mutexe, kritische Abschnitte, Sperren, Semaphoren. –

Antwort

1

Wie per Code geschrieben Ihre Resume wird nichts tun, da die Startfunktion bereits bei Label Pause ist. Also, Sie werden am Ende wieder aufgenommen, und die Funktion endet einfach mit dem Fortsetzen.

Wenn Sie von command_4 fortsetzen möchten, dann

ändern
if(variable_condition) 
    goto Pause; 

zu

if(variable_condition) 
    pause(); 

und entfernen Label Pause

Alternativ, wenn Götter Nachfrage GOTO der Codierung verwendet werden:

Thread th=new Thread(start); 
th.Start(); 

public void start() 
{ 
    command_1; 
    command_2; 
    command_3; 

    if(variable_condition) 
     goto Pause; 

    Pause: 
     pause(); 

    command_4; 
    command_5; 
    command_6; 
    command_7; 
} 

private void pause() 
{ 
    th.Suspend(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    th.Resume(); 
} 

Es ist sehr dumm, aber ...

+0

Erstens danke für Ihre Antwort. aber ich brauche "goto" Befehl diese Zeile. –

+0

genießen GOTO. Antwort mit GOTO hinzugefügt. –

+0

pls schauen nach meiner Antwort Kumpel –