【发布时间】:2018-01-08 12:17:09
【问题描述】:
所以我有 2 个类:Timers 和 KeyHook。
在 Timers 类中,我有一个名为 lastInteraction 的 DateTime 类型的公共变量。
KeyHook 类负责监听键盘事件。目前它会在按下某个键时打印到屏幕上。
我希望 KeyHook 事件用当前的 DateTime 更新 lastInteraction 变量,这可能吗?即使我在计时器类中创建 KeyHook 实例也无济于事。
我怎样才能做到这一点,我在网上搜索过,但据我所知,一个变量不能在类之间共享,并且在类之间传递值是行不通的。
一些代码sn-ps:
Program.cs
static void Main(string[] args)
{
BeatW.Timers timer = new BeatW.Timers();
timer.startTimers();
KeyHook kh = new KeyHook();
Console.ReadKey();
}
KeyHook.cs
public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Timers.cs
class Timers
{
public DateTime lastInteraction;
...
}
【问题讨论】:
-
你实例化了
KeyHook,但是回调方法是静态的。实例如何连接到静态回调? -
相反,hook 可以更新其
static字段/属性,您可以从实例方法中读取。 -
像其他人提到的那样,我也很困惑您的 Keyhook 和 Timers 类是如何连接的,但我想说您可能希望 Keyhook 触发一个事件并让 Timers 类订阅它所以可以更新 lastInteraction 值。