gpt4 book ai didi

c# - 如何在 C# 的控制台应用程序中使用键盘输入停止正在运行的方法?

转载 作者:太空狗 更新时间:2023-10-29 22:11:17 24 4
gpt4 key购买 nike

简而言之,我正在使用 C# 进行科学计算,我编写了一个方法,它有一个 while 循环,可以运行到用户指定的步数......实际上,这个方法可能需要很长时间才能执行(比如超过5小时)。例如,当需要这么长时间时,我可能想停止按 Esc 键的方法。

当我读到一些关于打破 while 的东西时,它就像一个 Boolean 标志或类似的东西一样简单。所以我想到了这样的事情:

public Double? Run(int n)
{
int i = 0;
while ((i < n) && (/* inputkey != ConsoleKey.Escape */))
{
// here goes the heavy computation thing
// and I need to read some "inputkey" as well to break this loop
i++;
}
// I'm not worried about the return statement, as it is easy to do...
// returns null if the user skipped the method by pressing Escape
// returns null if the method didn't converged
// returns the double value that the method calculated otherwise
}

嗯,这就是我到现在为止想知道的......所以请你能提供有用的想法到这种程度吗?我如何等待用户输入(我考虑过 Events,但我不确定如何在这里实现它,我认为如果我必须听,它会使代码更慢代码进入的每个 while 步骤的键...

嗯,有什么想法或意见吗?


更新:我认为我应该更好地描述问题。你给我的所有解决方案都可能解决我提出的这个问题,但我认为我对我的实际问题并不完全可靠。我不知道我是应该问另一个问题还是继续这个问题...

最佳答案

您可以从一个单独的线程运行此方法,并在按下某个键时设置一个停止变量:

object myLock = new object();
bool stopProcessing = false;

public Double? Run(int n)
{
int i = 0;
while (i < n)
{
lock(myLock)
{
if(stopProcessing)
break;
}
// here goes the heavy computation thing
// and I need to read some "inputkey" as well to break this loop
i++;
}
}

当按下某个键时,相应地更新 stopProcessing:

Console.ReadKey();
lock(myLock)
{
stopProcessing = true;
}

关于c# - 如何在 C# 的控制台应用程序中使用键盘输入停止正在运行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com