【问题标题】:Listener thread exits automatically监听线程自动退出
【发布时间】:2013-09-06 09:48:07
【问题描述】:

我们正在使用 C# 桌面版 VS2012 Express 中的 LeapMotion SDK 开发应用程序。 其中我们向 Leap Controller 对象添加了一个监听线程。 因此:

Controller objcontroller = new Controller();
Listener objlistener = new LeapListener();
objcontroller.AddListener(objlistener);

控制器对象对 OnFrame() 等重写的方法进行回调。

问题是监听线程在一定数量的回调后自动退出,范围从 3000 到 5500。输出窗口显示以下文本:

The thread (0x1614) has exited with code 0 (0x0).

LeapMotion 是一种运动检测设备,它以高达 100 fps 的速率报告帧。当检测到帧时,将调用OnFrame() 方法。

我们尝试使用 try catch.. 并且没有抛出异常 - 因为退出代码为 0。 我觉得内存消耗越来越大,导致编译器关闭线程。

对此的任何想法都会有所帮助。

平台目标是 x86,.net 框架目标是 4.0

【问题讨论】:

  • "我觉得内存消耗越来越大" 内存不足会导致 OutOfMemoryException。为什么不在这里显示线程代码的相关部分?似乎更有可能您没有正确检查错误等,并且线程只是退出,因为没有更多事情可做。
  • @stijn:线程是 OnFrame() 方法中包含的代码。当检测到帧时,该方法被回调。如果不是内存问题,那会是什么......??
  • “它是什么……??”它可以是任何东西。您没有显示任何代码,所以我们完全不知道如何缩小可能性。
  • 您是否持有对控制器对象(objController)的持久引用?如果不是,它将在确定的间隔后收集垃圾,这可以解释您观察到的行为。

标签: c# multithreading visual-studio leap-motion


【解决方案1】:

我在这里回答了一个相关问题: Leap Listener controller stops working after some time in VS2012

简单地说:您的控制器和侦听器对象超出范围并被 GC 处理。

【讨论】:

    【解决方案2】:

    实际上是 WPF 和 Leap 代码的问题。

    在这种情况下,我只是在侦听器退出时重新分配了控制器。我在我的类中全局声明了一个 Listener 对象为

    public static Listener objlistener; 
    public static Controller controller;
    

    并将其添加到 onExit() 事件中

    public override void OnExit(Controller controller)
    {
              objlistener = new LeapListener();
              controller.AddListener(objlistener);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多