如何取消跟帖?对于BackgroundWorker,可以通过DoWork的e.Cancel属性-事件处理程序报告取消。如何使用Thread对象实现相同的功能?以下是实现此目的的一种方法的示例。私有静态布尔_runThread;私有静态对象_runThreadLock=newobject();privatestaticvoidMain(string[]args){_runThread=true;Threadt=newThread(()=>{Console.WriteLine("开始线程...");bool_localRunThread=true;while(_localRunThread){Console.WriteLine("工作...");Thread.Sleep(1000);锁(_runThreadLock){_localRunThread=_runThread;}}Console.WriteLine("退出线程...");});t.开始();//等待任何按键按下,然后退出应用程序Console.ReadKey();//告诉线程停止lock(_runThreadLock){_runThread=false;}//等待线程完成t.Join();Console.WriteLine("全部完成。");}简而言之;线程检查bool标志并在标志为真时继续运行。与调用Thread.Abort相比,我更喜欢这种方法,因为它看起来更好、更干净。通常,您通过线程的执行作为对象方法的委托来执行此操作,该对象公开一个Cancel属性,长时间运行的操作会定期确定是否退出。例如publicclassMyLongTunningTask{publicMyLongRunninTask(){}publicvolatileboolCancel{get;放;}publicvoidExecuteLongRunningTask(){while(!this.Cancel){//做一些长时间运行的事情。//你可能仍然希望定期检查Cancel并在它为真时优雅地退出}}}其他地方:varlongRunning=newMyLongTunningTask();线程myThread=newThread(newThreadStart(longRunning.ExecuteLongRunningTask));我的线程。开始();//其他地方longRunning.Cancel=true;可以通过以下两种方式之一提前停止阻塞的线程:主要问题是,如果线程适用于任何需要正确释放的资源——在这种情况下——你需要使用线程所在的实际对象的属性运行。有Thread.Abort,它通过将ThreadAbortException注入线程来工作。这有点冒险,因为:如果此时正在执行本机代码,您的线程可能会卡住无辜的i+1你最好在GUI线程和后台线程之间编写你自己的信号机制。很难在不知道该线程内部发生了什么的情况下推荐一些东西,但我有一个线程通过等待循环中的某个对象来工作,我使用AutoResetEvent并等待它。以上就是C#学习教程:如何取消线程?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
