C# resetAbort做什么?
嗨,我有以下测试代码:C# resetAbort做什么?,c#,reset,thread-abort,threadabortexception,C#,Reset,Thread Abort,Threadabortexception,嗨,我有以下测试代码: class Program { static void Main(string[] args) { Thread t = new Thread(Work); t.Start(); Thread.Sleep(1000); t.Abort(); Thread.Sleep(1000); t.Abort(); Thread.Sleep(1000);
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(Work);
t.Start();
Thread.Sleep(1000);
t.Abort();
Thread.Sleep(1000);
t.Abort();
Thread.Sleep(1000);
t.Abort();
t.Join();
Console.WriteLine("End");
}
static void Work()
{
int i = 0;
while (i<10)
{
try
{
while(true);
}
catch(ThreadAbortException)
{
Thread.ResetAbort();
}
Console.WriteLine("I will come back!");
i++;
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
螺纹t=新螺纹(工件);
t、 Start();
睡眠(1000);
t、 中止();
睡眠(1000);
t、 中止();
睡眠(1000);
t、 中止();
t、 Join();
控制台。写入线(“结束”);
}
静态孔隙功()
{
int i=0;
while(i它取消中止线程的请求。因此,在这种情况下,循环将继续,线程应该仍然处于活动状态。ResetAborts取消对线程的中止请求。其他人关于ResetAbort
的回答是正确的。之所以不输出“End”是因为t.Join()
从不返回。这是因为您的线程只尝试中止三次,而您的循环包含10次无限循环尝试。Join
在目标线程完成其委托的运行时返回,而您的委托没有完成。哦..我省略了内部while循环…因此程序永远不会结束。谢谢!它取消了重新启动任务中止-所以它将从内部恢复,而(真的),我是对的吗?不,因为抛出了一个异常,所以它将不再在那里,但很难推测,因为这个代码是…奇怪。是的!这是我的错。对不起!同时谢谢你!