C# 线程在检测到F4密钥时延迟进程
请参考以下代码C# 线程在检测到F4密钥时延迟进程,c#,C#,请参考以下代码 static class Program { [Flags] private enum KeyStates { None = 0, Down = 1, Toggled = 2 } [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] private static extern short Ge
static class Program
{
[Flags]
private enum KeyStates
{
None = 0,
Down = 1,
Toggled = 2
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern short GetKeyState(int keyCode);
private static KeyStates GetKeyState(Keys key)
{
KeyStates state = KeyStates.None;
short retVal = GetKeyState((int)key);
//If the high-order bit is 1, the key is down
//otherwise, it is up.
if ((retVal & 0x8000) == 0x8000)
state |= KeyStates.Down;
//If the low-order bit is 1, the key is toggled.
if ((retVal & 1) == 1)
state |= KeyStates.Toggled;
return state;
}
public static bool IsKeyDown(Keys key)
{
return KeyStates.Down == (GetKeyState(key) & KeyStates.Down);
}
public static bool IsKeyToggled(Keys key)
{
return KeyStates.Toggled == (GetKeyState(key) & KeyStates.Toggled);
}
private static void DoSomething(object state)
{
if (IsKeyDown(Keys.F4))
{
System.Threading.Thread.Sleep(30000);
}
}
[STAThread]
static void Main()
{
Console.WriteLine("Application Started");
System.Threading.Timer myTimer = new System.Threading.Timer(new TimerCallback(DoSomething), null, 0, 1000);
// execute some long codes here
}
}
每当系统检测到“F4”按键事件时,它将延迟30秒。。在我当前的代码中,即使用户按下F4键,进程似乎也不会延迟
谢谢。GetKeyState()只能在GUI应用程序中正常工作。它提供在检测到按键并将其添加到消息队列时记录的按键的同步状态。重要信息:确保可以正确检测修改器键的状态,例如,在处理击键时,它们可能已更改
这是一个控制台模式的应用程序,您必须改用GetAsyncKeyState()。您可能希望通过事件捕获按键,而不是基于计时器回调进行检查,更重要的是,线程睡眠不会影响此处的主线程,它将休眠运行回调的派生线程。暂停进程意味着什么?除非这个过程用“延迟”的方法暴露了某种IPC接口,否则不清楚你想要实现什么。对不起,我修改了我的帖子。它不会延迟另一个进程,但会延迟程序本身。我已将其更改为GetAsyncKeyState(),但睡眠不会影响此处的主线程。我该怎么办?你应该发布代码,让所有人相信你能看到延迟。正如贴出的那样,你永远看不到它,计时器一直在滴答作响。您应该在Debug+Windows+threads调试器窗口中看到一堆线程,它们都处于休眠状态。它对主线程没有任何影响。