C#中止正在运行的线程,结束上次操作

 
最近在写软件,需要满足来回切换的需求,用的多线程,所以就想把上次没执行完的操作给结束掉,百度了一些,最后得出还是得在程序中进行多次判断才能完美结束线程!!!


一定得在自己写的代码中进行判断,判断啥时候得提前结束线程!


强制结束线程可能会有不可预计的问题!!!

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博客​​​​​​​​​​​​​​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值