繁体   English   中英

当失去焦点时如何使C#命令行程序保持运行

[英]How to keep the C# command line program still running when it loses focus

我的命令行C#程序(在Windows VM上运行)连接到Redis,该Redis接受Redis订阅的通道中的消息。 如果我不触摸计算机,那么一旦我用手指触摸计算机,它仍然可以正常运行。穿过触控板(我使用Macbook)或最小化窗口后,他似乎失去了与Redis的连接。 在这一点上,我必须在键盘上键入一些字符以保持程序运行。 为什么? 我怎么解决这个问题?

无论如何,谢谢您给我的建议,祝您愉快。

这是代码(源代码确实太大,我只取出了一部分。):

static void Main(string[] args)
    {
        RedisConnectionString = $"{redisIp}:{redisPort}";
        Console.WriteLine($"Connecting to {RedisConnectionString}...");
        connection = ConnectionMultiplexer.Connect(RedisConnectionString);
        db = connection.GetDatabase();

        db.KeyDelete(SmcStreamDataList);

        smcSession = new Session();

        // Create pub/sub
        pubsub = connection.GetSubscriber();
        pubsub.Subscribe(testApiChannel).OnMessage((cmqMsg) => { SmcApiMessageAction(cmqMsg.Message); });

        Console.WriteLine("Starting now...");

        while (true)
        {
            Thread.Sleep(100);
        }
    }

看来这不是程序本身的问题。 我认为这更多是您的机器设置问题。 不幸的是,我没有Apple系统,但是我猜想,当焦点丢失或窗口最小化时,您的虚拟机将被挂起。

仅出于测试目的,您可以使用一个简单的控制台应用程序,该应用程序尝试每3秒对网络上的计算机进行ping操作,然后将结果(包括时间戳记)写为输出。 启动程序后,请与故障程序进行相同的测试,然后检查是否有比估计的3秒更大的间隙。 如果可行,则可能导致每个ping打开并关闭新的网络连接。 因此,下一个测试将是在控制台应用程序中下载一个大文件(仅用于模拟稳定的网络连接),然后重试该过程。

如果这些测试中的任何一个失败,则可能是主机操作系统或虚拟化系统的问题,而不是程序的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM