我遇到了多线程的问题,下面是伪代码:
{
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做我的项目。
答案 0 :(得分:0)
您需要在类的构造函数中创建并启动线程(而不是在click事件处理程序中)。然后创建一个队列(或列表)以添加您的坐标。在DoStuffOnThread()方法中,您应该连续(在循环中)调用get_coordinates_from_kinect()并将一组x,y,z添加到队列中。 最后,在按钮单击的事件处理程序中,从队列中获取项目并根据需要处理它们
以下是示例:
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 } }
ConcurrentQueue<Coords> queue=new ConcurrentQueue<Coords>();
while (true) queue.Enqueue(new Coords());
Coords coord; while (queue.TryDequeue(out coord)) { // ... process your coordinates as needed }
Thread thr = new Thread(DoStuffOnThread) thr.Start()