2013-10-03 2 views
0

Я использую ThreadPool.QueueUserWorkItem для выполнения задачи async, которая выполняет POST запрос через HTTP.WindowsPhone | Как прервать ThreadPool.QueueUserWorkItem

ThreadPool.QueueUserWorkItem(new WaitCallback(UploadPhoto), photoFileName); 

На данный момент я хочу добавить возможность отмены загрузки из пользовательского интерфейса.

У меня есть два вопроса:

  • Как я могу реализовать прерывание потоков?
  • Is ThreadPool подходит для моей цели?

ответ

2

Рассмотрите возможность использования асинхронной работы с WP7 с помощью Task.Factory.StartNew. Вы можете использовать CancellationTokens для отмены отмены. Вот как я делаю свою асинхронную работу. Реализовать прерывание, вы можете сделать следующее (с помощью задач):

var task = Task.Factory.StartNew(()=> 
{ 
    // some operation that will be cancelled 
    return "some value"; 
}) 
.ContinueWith(result => 
{ 
    if(result.Status == TaskStatus.Cancelled) // you have other options here too 
    { 
     // handle the cancel 
    } 
    else 
    { 
     string val = result.Result; // will be "some value"; 
    } 
}); 

The ContinueWith Пункт цепь другого способ произойти после того, как тело первой задачи завершается (так или иначе). Параметр «результат» для метода ContinueWith - это задача, к которой привязана цепочка ContinueWith, и есть свойство «Результат» результата задачи, которое представляет собой любое возвращаемое значение, предоставленное предыдущей задачей.

Смежные вопросы