使用 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.

中执行此操作