2015-01-03 31 views
0
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生活运行此功能在后台

这是不是从游戏核心源代码片断,它完全是外部程序读取进程内存,所以我没有任何一种超级压力

+0

什么版本的.NET的是你吗?这会影响后台任务的启动。 –

+0

我有这个项目的.NET 4.5版本:) –

+0

在这种情况下,我建议@NedStoyanov的回答 –

回答

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

+1

我会使用'await Task.Delay'这种方式,你不会用完一个线程,而你睡觉。 –