2016-04-28 14 views
2

Wie kann ich eine Aufgabe vollständig beenden, wenn die Aufgabe ausgeführt wird?Aufgabe stoppen, wenn Aufgabe ausgeführt wird

private async void button1_Click(object sender, EventArgs e) 
{ 
    await Backup(file); 
} 

public async Task Backup(string File) 
{ 
    await Task.Run(() => 
    { 
     1)do something here 

     2)do something here 

     3)do something here 

     }); 
} 
private async void button2_Click(object sender, EventArgs e) 
{ 
    <stop backup> 
} 

Wenn ich sagen Aufgabe während der 2. Sache aufhören wollen Verarbeitung ist, und ich ein button2 klicken dann wird die Aufgabe Prozess

stoppen Wie kann ich stornieren oder die Aufgabe, am Ende von button2_Click?

+1

https://msdn.microsoft.com/en-us/library/hh160373(v=vs.110).aspx mit Beispiel – weston

Antwort

2
// Define the cancellation token source & token as global objects 
CancellationTokenSource source = new   CancellationTokenSource(); 
CancellationToken token; 

//when button is clicked, call method to run task & include the cancellation token 

private async void button1_Click(object sender, EventArgs e) 
{ 
    token = source.Token; 
    await Backup(file, token); 
} 


public async Task Backup 
(string File, CancellationToken token) 
{ 
    Task t1 = Task.Run(() => 
    { 
    //do something here 
    }, token); 
} 

//cancel button click event handler 
private async void cancelButton_Click(object sender, EventArgs e) 
{ 
    if(source! = null) 
    { 
    source.Cancel(); 
    } 
} 

//tasks 
https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx 

//CancellationToken 
https://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken(v=vs.110).aspx 
+0

i erhalten einen Fehler in CancellationToken Token = null; (NULL kann nicht in 'System.Threading.CancellationToken' konvertiert werden, da es sich um einen nicht nullbaren Wert handelt.) –

+0

Ich denke, Sie müssen source.Token verwenden, wenn Sie Task instanziieren. –

Verwandte Themen