最近在写软件,需要满足来回切换的需求,用的多线程,所以就想把上次没执行完的操作给结束掉,百度了一些,最后得出还是得在程序中进行多次判断才能完美结束线程!!!
一定得在自己写的代码中进行判断,判断啥时候得提前结束线程!
强制结束线程可能会有不可预计的问题!!!
public async void GetImgAsync(PictureBox pb, ImgInfo info, CancellationToken token)
{
Task<string> t = Task.Run(() =>
{
try
{
pb.Image = Resources.wait;
//判断是否要求关闭,没有则会触发异常
token.ThrowIfCancellationRequested();
string path = Comm.GetImgPath(info.Url);
//如果图片存在
if (string.IsNullOrEmpty(path))
{
//判断是否要求关闭,没有则会触发异常
token.ThrowIfCancellationRequested();
//获取图片
using (Image img = HttpTools.GetImage(info.Url))
{
//保存图片
path = Comm.ImgSvse(img, info.Url);
}
//判断是否要求关闭,没有则会触发异常
token.ThrowIfCancellationRequested();
}
return path;
}
catch (Exception)
{
//异常处理
return null;
}
}, token);
try
{
string s = await t;
if (s != null)
{
pb.ImageLocation = s;
}
}
catch (Exception)
{
//此处应该显示错误图片
pb.Image = Resources.wait;
}
这个结束线程不是立刻结束,只有等你调用CancellationTokenSource对象的Cancel方法,这个时候
//判断是否要求关闭,没有则会触发异常
token.ThrowIfCancellationRequested();
这个方法就会触发异常,然后就在异常里面处理
一秒取消了好多次操作也没有出现什么,虽然实际用不到取消这么多次
我的博客地址:Wy博客