2015-01-03 57 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'這種方式,你不會用完一個線程,而你睡覺。 –