簡體   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