取消使用ThreadPool.RunAsync启动的工作项

时间:2014-02-24 21:31:27

标签: c# multithreading threadpool

我有以下代码:

var op = ThreadPool.RunAsync(delegate { _model.HeapSort(); });

有没有办法停止此线程,例如当我按下“取消”按钮时?我试过op.Cancel()但似乎没有发生任何事情。

2 个答案:

答案 0 :(得分:0)

在你的HeapSort实现中,必须有一个标志来停止当前线程。

如果您正在进行循环,例如:

while(!cancelThread)
{
   ... // Your iterative sort algorithm here
}

然后,如果您将 cancelThread 变量设置为 true ,那么您的主题将结束。 CancellationToken结构用于这种线程控制。

答案 1 :(得分:0)

ThreadPool.RunAsync接受WorkItemHandler类型的委托:

public delegate void WorkItemHandler(IAsyncAction operation)

它唯一的参数IAsyncAction来自IAsyncInfo。有IAsyncInfo.Status财产。我认为在AsyncStatus.Canceled被调用(未经测试)时它被设置为IAsyncInfo.Cancel

因此,您可以定期检查代理中是否operation.Status == AsyncStatus.Canceled,然后抛出OperationCancelledException