窗口未对焦时监听器丢失C#

时间:2015-11-05 14:10:32

标签: c# winforms leap-motion

我有这个听众

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

并在公开Form1()

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

一切正常,直到我从窗口离开焦点。如果我离开焦点,标签文本不再改变,然后我回到窗口,焦点标签文本开始随着收听者的信息而改变。

当我没有关注窗口时,为什么听众不工作?

1 个答案:

答案 0 :(得分:3)

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

如果您确实想在后台使用相框 - 并且确定它不会导致问题 - 您可以请求背景帧策略:Foreground and Background Applications

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