运行此功能以在后台工作

Run this function to work in background

    private void CommandtWatcher()
    {
        // Both PR and D2H are classes from external dll files
        // PR is ProcessMemoryReader class, it reads a message from X window
        if(PR[0].getLastChatMsg().Equals("#eg"))    // If I typed "#eg" then
        {
            D2HList[0].QuitGame("WindowToBeClosed"); // Close game window
        }
    }

这些功能很好用,但我不能强迫它在后台工作而不打扰UI生活

而且这不是游戏核心源代码的片段,它完全是外部程序读取进程内存,所以我没有任何超能力

在 .NET 4.5 中,您可以使用 Task.Run 来执行此操作。我还将方法更改为 return 结果 Task。这样,代码的客户可以选择是 await 结果还是忽略它(如果希望一劳永逸)。

private Task CommandtWatcher()
{
     return Task.Run(() =>
     {
         // Both PR and D2H are classes from external dll files
         // PR is ProcessMemoryReader class, it reads a message from X window
         if(PR[0].getLastChatMsg().Equals("#eg"))    // If I typed "#eg" then
         {
             D2HList[0].QuitGame("WindowToBeClosed"); // Close game window
         }
     }       
}

这个怎么样:

private void CommandtWatcher()
{
    while (true)
    {
        // Both PR and D2H are classes from external dll files
        // PR is ProcessMemoryReader class, it reads a message from X window
        if(PR[0].getLastChatMsg().Equals("#eg"))    // If I typed "#eg" then
        {
            D2HList[0].QuitGame("WindowToBeClosed"); // Close game window
            return;
        }

        Thread.Sleep(100); // Prevent hogging cpu
    }
}

并在后台 运行:

Task.Run((Action)CommandWatcher);

这会运行一个新线程中的方法,与UI分开,等待LastChatMsg成为#eg然后执行逻辑并停止。