读取和处理数据不断多线程c#wpf

时间:2015-06-11 09:38:13

标签: c# wpf multithreading kinect

我遇到了多线程的问题,下面是伪代码:

{
    float x,y,z;

    get_coordinates_from_kinect()// put them into variables x,y,z
    public void button1_Click(object sender, RoutedEventArgs e)
    {
       Thread thr = new Thread(DoStuffOnThread)
       thr.Start()
    }
    private void DoStuffOnThread()
    {
        Dispatcher.Invoke(new Action(doSomething));
    }
    void doSomething()
} 

我经常从kinect获取坐标。当我点击button1时我想继续使用这些数据,所以我决定使用多线程,但问题是当我按下按钮操作时只运行一次(一组坐标)。我的目标是不断发送这些数据。这该怎么做 ?我在c#中用wpf做我的项目。

1 个答案:

答案 0 :(得分:0)

您需要在类的构造函数中创建并启动线程(而不是在click事件处理程序中)。然后创建一个队列(或列表)以添加您的坐标。在DoStuffOnThread()方法中,您应该连续(在循环中)调用get_coordinates_from_kinect()并将一组x,y,z添加到队列中。 最后,在按钮单击的事件处理程序中,从队列中获取项目并根据需要处理它们

以下是示例:

  1. 创建一个容纳坐标的类:
  2. class Coords { 
      float x, y, z; 
      public Coords() { get_coordinates_from_kinect(); }
      void get_coordinates_from_kinect() { 
        // ... get coordinates and put them into x, y, z
      }
    }
    
    1. 在主类中定义坐标队列:
    2. ConcurrentQueue<Coords> queue=new ConcurrentQueue<Coords>();
      
      1. 在DoStuffOnThread()中执行以下操作:
      2. while (true) 
         queue.Enqueue(new Coords());
        
        1. 在button1_Click()中执行以下操作:
        2. Coords coord;
          while (queue.TryDequeue(out coord)) {
            // ... process your coordinates as needed
          }
          
          1. 在主类的构造函数中创建并启动线程:
          2. Thread thr = new Thread(DoStuffOnThread)
            thr.Start()