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