陋室铭
永远也不要停下学习的脚步(大道至简至易)

在使用.Net Framework的时候,我们一般用Thread.Start()来开始一个线程,用Thread.Abort()来强制结束这个线程,然而当项目整体迁移到.Net Core的时候,发现程序进行到Thread.Abort()的时候突然崩掉了。

        原因是Thread.Abort 已被弃用。那么结束一个线程的替代方法是什么呢。当尝试采用Thread.Interrupt()后,线程并没有按预期的情况结束,反而是随着线程的不断开启而越来越来以至于卡线程了。

        按照官方的解决方式是使用 CancellationToken 来中止工作单位的处理,而不是呼叫 Thread.Abort。 下列范例示范如何使用 CancellationToken。


    void ProcessPendingWorkItemsNew(CancellationToken cancellationToken)

    {

    if (QueryIsMoreWorkPending())

    {

    // If the CancellationToken is marked as "needs to cancel",

    // this will throw the appropriate exception.

    cancellationToken.ThrowIfCancellationRequested();



    WorkItem work = DequeueWorkItem();

    ProcessWorkItem(work);

    }

    }

 



​        然而本人觉得这个方法略显麻烦,何不从根本的线程运行逻辑上来中断线程,大家知道所有线程不外乎一个循环,我只要能够控制这个循环结束不就行了吗。

        处理方法如下:

        


    private bool isThreadStart = false; //增加一个线程控制开关

    private Thread thread;

    //线程启动方法

    void ThreadStart()

    {

    thread = new Thread(ThreadRun); //初始化一个ThreadRun的线程

    isThreadStart = true; //控制线程开始

    thread.Start();

    }

    //线程停止方法

    void ThreadStop()

    {

    isThreadStart = false; //控制线程结束

    thread = null;

    }

    //线程运行方法

    void ThreadRun()

    {

    while(true)

    {

    if(!isThreadStart)

    {

    break; //强制退出循环

    }

    //线程开始处理

    }

    }

 





 

posted on 2024-10-14 15:48  宏宇  阅读(39)  评论(0编辑  收藏  举报