【发布时间】:2020-05-04 13:26:12
【问题描述】:
我在控制台版本的链接测试器上工作。 我在多个线程上启动该功能,但无法通过按键取消它们。 知道我该怎么做吗?
try
{
Thread[] tr = new Thread[Variables.Threads];
int i = 0;
while (i < Variables.Threads && Variables.running)
{
tr[i] = new Thread(new ThreadStart(Program.Runner));
i++;
}
//Start each thread
foreach (Thread x in tr)
{
x.Start();
}
//Console.ReadKey();
Task.Factory.StartNew(() =>
{
while (Colorful.Console.ReadKey().Key != ConsoleKey.Escape);
Variables.running = false;
foreach (Thread x in tr)
{
x.Abort();
}
Program.Menu();
});
}
catch (Exception)
{
}
编辑:当我的线程接近尾声时,我的所有应用程序都不会移动
【问题讨论】:
-
您如何阻止您的控制台应用程序终止?使用您给定的代码,控制台应用程序将简单地结束,没有什么可以阻止它。
-
也许您正在寻找这个?
while (tr.Any(x => x.IsAlive));//等待线程关闭 -
感谢您的帮助,但我的研究是关于中止而不是等待。我正在尝试通过按键来停止所有线程。
-
我的意思是等待 abortion 完成,abort 只是发出要中止的线程,但不会立即中止它,所以你可能需要等待它,我建议的代码就是这样做的。跨度>
标签: c# multithreading console break cancellationtokensource