使用 console.readline 时如何读取控制台输入以保持进程处于活动状态?
How to read console input when using console.readline to keep process alive as well?
我 learning/experimenting 使用 SpotifyAPI.Net DotNetCore 控制台应用程序,无法从控制台读取用户输入。我认为主线程中的 console.readline() (用于使控制台应用程序保持活动状态)优先于我的一种方法中的方法。
如何在让主线程同时保持活动状态时获取控制台输入?
几天来我一直在搜索这个问题,但我所能找到的只是关于如何让控制台应用程序保持活力的问题。
我开始认为我最好尝试使用一些简单的 UI?
在我的主要方法中:
AuthorizationCodeAuth auth =
new AuthorizationCodeAuth(_clientId, _secretId, "http://localhost:4002", "http://localhost:4002",
Scope.PlaylistReadPrivate | Scope.PlaylistReadCollaborative);
auth.AuthReceived += AuthOnAuthReceived;
auth.Start();
auth.OpenBrowser();
Console.ReadLine();
auth.Stop(0);
然后 AuthOnAuthReceived 是:
{
AuthorizationCodeAuth auth = (AuthorizationCodeAuth) sender;
auth.Stop();
Token token = await auth.ExchangeCode(payload.Code);
SpotifyWebAPI api = new SpotifyWebAPI
{
AccessToken = token.AccessToken,
TokenType = token.TokenType
};
PrintUsefulData(api);
}
PrintusefulData 然后做了一些事情,我想用一些基本的东西来获取一些用户控制台输入,比如:
var input = Console.ReadLine();
但是在调试时它永远不会超出这行代码,因为程序终止是因为主线程中的 readline 获得输入然后终止。
我希望有一些方法可以让控制台程序保持活动状态,同时还可以在控制台中从用户那里获得一些输入。但是我所有的变体都由于用户输入而终止,并且永远不会到达我想要用于读取和处理输入的代码。
我猜我是个新手,遗漏了一些非常明显的东西。
你可以看看synchronization primitives, e.g. the ManualResetEvent。这将允许您使用 WaitOne
而不是 ReadLine
来等待回调在您的 main
方法中执行。 WaitOne
将阻塞直到 Set
被调用,您可以在 AuthOnAuthReceive
.
中执行此操作
我 learning/experimenting 使用 SpotifyAPI.Net DotNetCore 控制台应用程序,无法从控制台读取用户输入。我认为主线程中的 console.readline() (用于使控制台应用程序保持活动状态)优先于我的一种方法中的方法。 如何在让主线程同时保持活动状态时获取控制台输入?
几天来我一直在搜索这个问题,但我所能找到的只是关于如何让控制台应用程序保持活力的问题。
我开始认为我最好尝试使用一些简单的 UI?
在我的主要方法中:
AuthorizationCodeAuth auth =
new AuthorizationCodeAuth(_clientId, _secretId, "http://localhost:4002", "http://localhost:4002",
Scope.PlaylistReadPrivate | Scope.PlaylistReadCollaborative);
auth.AuthReceived += AuthOnAuthReceived;
auth.Start();
auth.OpenBrowser();
Console.ReadLine();
auth.Stop(0);
然后 AuthOnAuthReceived 是:
{
AuthorizationCodeAuth auth = (AuthorizationCodeAuth) sender;
auth.Stop();
Token token = await auth.ExchangeCode(payload.Code);
SpotifyWebAPI api = new SpotifyWebAPI
{
AccessToken = token.AccessToken,
TokenType = token.TokenType
};
PrintUsefulData(api);
}
PrintusefulData 然后做了一些事情,我想用一些基本的东西来获取一些用户控制台输入,比如:
var input = Console.ReadLine();
但是在调试时它永远不会超出这行代码,因为程序终止是因为主线程中的 readline 获得输入然后终止。
我希望有一些方法可以让控制台程序保持活动状态,同时还可以在控制台中从用户那里获得一些输入。但是我所有的变体都由于用户输入而终止,并且永远不会到达我想要用于读取和处理输入的代码。
我猜我是个新手,遗漏了一些非常明显的东西。
你可以看看synchronization primitives, e.g. the ManualResetEvent。这将允许您使用 WaitOne
而不是 ReadLine
来等待回调在您的 main
方法中执行。 WaitOne
将阻塞直到 Set
被调用,您可以在 AuthOnAuthReceive
.