当窗口不在焦点C#时侦听器丢失

本文关键字:侦听器 焦点 窗口 | 更新日期: 2023-09-27 18:20:45

我有这个监听器

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();

和公开形式1()

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

一切都很好,直到我把焦点从窗口移开。如果我离开焦点,标签文本不再改变,然后当我带着焦点回到窗口时,标签文本开始随着来自听众的信息而改变。

当我没有集中注意力的时候,为什么听众不工作?

当窗口不在焦点C#时侦听器丢失

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

如果你真的想要在后台使用框架,并且确信它不会引起问题,你可以请求后台框架策略:前景和背景应用程序。

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