C#共享或修改类之间的变量

时间:2017-08-01 14:48:06

标签: c# class timer scope

所以我有2个类:Timers和KeyHook。

在Timers类中,我有一个名为lastInteraction的公共变量,类型为DateTime。

KeyHook类负责监听键盘事件。目前,当按下某个键时,它会打印到屏幕上。

我希望KeyHook事件用当前的DateTime更新lastInteraction变量,这可能吗?即使我在计时器类中创建了KeyHook实例,它也没有帮助。

我怎样才能实现这样的目标,我在网上进行了分析,但据我所知,变量不能在不同类之间共享,并且在不同类之间传递值不会起作用。

一些代码段:

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;
    ...
}

2 个答案:

答案 0 :(得分:1)

授予let imageView : UIImageView = (vc.view.viewWithTag(1) as? UIImageView)! imageView.image = UIImage(named: backgroundImage, in: Bundle(for: type(of: self)), compatibleWith: nil) 代理人更新KeyHook

lastInteraction

注意:这是一种快速而简单的方法,可以轻松实现功能。使用C# events构建更强大的功能,允许您使用C#工具添加,删除和组合事件处理程序以处理事件。

答案 1 :(得分:0)

如果设置静态类,则可以执行您想要的操作。

public static class Timers
{
    public static DateTime lastInteraction { get; set; }
    ...
}

在KeyHook类中,您可以在其上放置值。

public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
    {
        int vkCode = Marshal.ReadInt32(lParam);
        >>>>>Timers.lastInteraction = DateTime.Now;
        Console.WriteLine((Keys)vkCode);
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

您可以在运行时访问所有命名空间范围内的Timers.lastInteraction值。