运行此功能以在后台运行

时间:2015-01-03 02:43:02

标签: c# asynchronous background task .net-4.5

    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生活

这不是游戏核心源代码的片段,它相当完全是外部程序读取进程内存,所以我没有任何超级大国

2 个答案:

答案 0 :(得分:3)

在.NET 4.5中,您可以使用Task.Run执行此操作。我还会更改方法以返回结果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
         }
     }       
}

答案 1 :(得分:2)

这个怎么样:

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,然后执行逻辑并停止。