我有以下代码:
var op = ThreadPool.RunAsync(delegate { _model.HeapSort(); });
有没有办法停止此线程,例如当我按下“取消”按钮时?我试过op.Cancel()
但似乎没有发生任何事情。
答案 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
。