C# 检测一个没有响应的线程并终止它?

C# 检测一个没有响应的线程并终止它?,c#,multithreading,kill-process,C#,Multithreading,Kill Process,有时后台线程运行缓慢,就像,没有响应,响应,没有响应 是否可以检测到这一点,然后终止它,然后重新启动它? 我做的线是这样的。Form3只包含一个web浏览器控件,它只导航和搜索web文档 Thread ab1 = new Thread(new ThreadStart(ThreadProc)); ab1.SetApartmentState(ApartmentState.STA); ab1.Start(); private void ThreadProc() { Form frm = ne

有时后台线程运行缓慢,就像,没有响应,响应,没有响应

是否可以检测到这一点,然后终止它,然后重新启动它? 我做的线是这样的。Form3只包含一个web浏览器控件,它只导航和搜索web文档

Thread ab1 = new Thread(new ThreadStart(ThreadProc));
ab1.SetApartmentState(ApartmentState.STA);
ab1.Start();

private void ThreadProc()
{
    Form frm = new Form3(currentAB);
    frm.ShowDialog();

}

另一种方法是在线程上使用计时器,每隔一定时间调用一次,检查线程是否已死机

Systems.Threading.Timer类将在这方面帮助您


尝试此操作仅在线程处于活动状态时进行检查,但这并不意味着将检测线程是否在长时间运行操作中被阻塞

 public partial class Form1 : Form
  {
     Thread ab1;   
     public Form1()
    {
         InitializeComponent();
        Thread ab1 = new Thread(new ThreadStart(ThreadProc));
        ab1.SetApartmentState(ApartmentState.STA);
        ab1.Start();
        bool isAlive = true ;
        TimerCallback tmrCallBack = new TimerCallback(CheckStatusThreadHealth);  
        System.Threading.Timer tmr = new System.Threading.Timer(tmrCallBack,isAlive,2000,2000);
     }
     public void CheckStatusThreadHealth(object isAlive)
     {
         isAlive = ab1.IsAlive ;  
     }
     private void ThreadProc()
     {
         Form frm = new Form1();
        frm.ShowDialog();

     }

希望这也能帮助你展示你的作品。。如果没有看到你的程序,人们无法帮助你。你能告诉我们你在后台线程中正在做什么吗?我认为最好是阻止它不转发,而不是仅仅终止它。线程不能“不响应”,进程不能。你是说线程吗?为什么不解决真正的问题?你不能非合作地杀死线程。不要使用线程。在不进行谷歌搜索的情况下中止,以了解为什么不能可靠地使用线程。您能解释一下吗?这是否意味着如果线程没有每2秒应答一次,它就会终止?或者我必须使用ab1.dispose();在ChechStatusThreadHealth?中,这将仅检查线程是否处于活动状态,但并不意味着这将检测线程是否在长时间运行操作中被阻塞。如果不处于活动状态,则意味着线程已正确终止或异常终止。您可以轻松地启动一个新线程,因为最新的线程已被垃圾收集