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

时间:2019-06-27 05:27:32

标签: c#

我的命令行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);
        }
    }

1 个答案:

答案 0 :(得分:0)

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

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

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