C# 检测一个没有响应的线程并终止它?
有时后台线程运行缓慢,就像,没有响应,响应,没有响应 是否可以检测到这一点,然后终止它,然后重新启动它? 我做的线是这样的。Form3只包含一个web浏览器控件,它只导航和搜索web文档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
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?中,这将仅检查线程是否处于活动状态,但并不意味着这将检测线程是否在长时间运行操作中被阻塞。如果不处于活动状态,则意味着线程已正确终止或异常终止。您可以轻松地启动一个新线程,因为最新的线程已被垃圾收集