window 不在焦点 C# 时听众丢失

Listener lost when window is not in focus C#

我有这个听众

public class LeapEventListener : Listener
{
    public string frame = string.Empty;
    public string Frame { get { return frame; } }
    public event EventHandler FrameChanged;

    private void SetFrame(string value)
    {
        if (value == null) value = string.Empty;
        if (frame == value) return;
        frame = value;
        var handler = FrameChanged;
        if (handler != null) handler(this, EventArgs.Empty);

    }
    public override void OnFrame (Controller controller)
    {
         Frame frame = controller.Frame();
         FingerList fingers = frame.Fingers;

        SetFrame("Frame id: " + frame.Id); 
    }

    public override void OnInit (Controller controller)
    {
        Console.WriteLine ("Initialized");
    }

    public override void OnConnect (Controller controller)
    {
        Console.WriteLine ("Connected");
        //If using gestures, enable them:
        controller.EnableGesture (Gesture.GestureType.TYPE_CIRCLE);
    }

    //Not dispatched when running in debugger
    public override void OnDisconnect (Controller controller)
    {
        Console.WriteLine ("Disconnected");
    }
}

然后在我的全局 Form1.cs

Controller controller = new Controller();
LeapEventListener listener = new LeapEventListener();

并在 public Form1()

string fingers = listener.frame;
controller.AddListener(listener);
label1.DataBindings.Add("Text", listener, "Frame");

一切正常,直到我离开 window 的焦点。如果我离开焦点,标签文本不再改变,然后当我回到 window 焦点时,标签文本开始随着来自听众的信息而改变。

为什么当我没有聚焦 window 时侦听器不工作?

Leap API 有前台和后台应用的概念。默认情况下,只有前台应用程序接收跟踪数据。这是为了防止您的应用程序在用户与其他应用程序交互时接收输入。

如果您真的想要在后台使用框架 - 并且确定它不会造成问题 - 您可以申请背景框架政策:Foreground and Background Applications.

启用此策略将在另一个非 Leap 应用程序获得焦点时获取帧。如果您在启用 Leap 的应用程序中需要帧,可以使用一个未记录的策略标志 (1 << 15)。