2017-01-24 3 views
1

У меня есть форма в C# с текстовым полем.Отменить Параллельный цикл из формы

Я хочу запустить событие таким образом, чтобы каждый раз, когда текст был изменен в текстовом поле, он отменяет последний цикл parallel.for и перезапускает новую информацию, однако я не могу решить, как извлечь старый маркер отмены для отмены предыдущая итерация, когда это событие было запущено.

Я надеюсь, что следующий код объясняет, что я хочу сделать

private void Textbox_TextChanged(object sender, EventArgs e) 
    { 

     //call previous cancellation token from Textbox.tag and execute 

     CancellationTokenSource cts = new CancellationTokenSource(); 
     ParallelOptions op = new ParallelOptions(); 
     op.CancellationToken = cts.Token; 
     Parallel.For(0, 1, op, t => 
     { 
      //Store cancellation token in textbox.tag 

      //do stuff 
     }); 
    } 

Заранее спасибо

ответ

2

Вам нужно объявить/хранить его вне рамок методы:

private CancellationTokenSource cts = new CancellationTokenSource(); 
private ParallelOptions op = new ParallelOptions(); 

private void Textbox_TextChanged(object sender, EventArgs e) 
    { 

     //call previous cancellation token from Textbox.tag and execute 
     cts.Cancel(); 

     cts = new CancellationTokenSource(); 
     op = new ParallelOptions(); 

     op.CancellationToken = cts.Token; 
     Parallel.For(0, 1, op, t => 
     { 
      //do stuff 
     }); 
    } 
Смежные вопросы