级联线程查杀

时间:2014-07-15 06:53:17

标签: c# multithreading winforms

对于时间/日期驱动的线程应用程序,我使用创建的线程(new Thread()并将线程全部放入列表中),其中调用一个运行未定义时间的方法(可以是1秒甚至一整天。在此方法中,可以创建新的(子)线程(也使用new Thread())。

现在,当应用程序的线程部分结束时(手动或因为程序结束),我将浏览我创建的线程列表并手动结束。

现在据我所知,创建子线程的线程结束(因此创建第二个线程的方法所在的线程)并不意味着子线程的结束。所以我的问题是:是否有任何好的方法来管理它,线程杀死会对其子级进行级联(或者我误解了线程在那里的工作方式?)。

编辑: 有人问:这里提到的所有线程都是后台线程(因此后台进程会创建一个子进程进程,该进程将在父进程结束时结束)。

1 个答案:

答案 0 :(得分:6)

你应该以受控的方式停止你的线程,不要让它们被os杀死(假设它们是后台线程)或者调用Thread.Abort(),如果那就是"线程查杀&#34 ;

使用CancellationTokenSource创建一个CancellationToken,并为每个SubThread提供此令牌。线程内的方法/循环应该检查token.IsCancellationRequested()。然后,您只需要调用TokenSource.Cancel一次(在主线程中)。

请参阅How to use the CancellationToken property?