【问题标题】:how to start a thread from implementation of a delegate?如何从委托的实现开始一个线程?
【发布时间】:2019-09-05 11:57:22
【问题描述】:

我正在使用相机并希望从委托中异步调用一个线程来处理到达的新帧

我试过了:

Task.Factory.StartNew(() => Thread.Sleep(5000))
Thread t = new Thread(new ThreadStart(TestMethod));
t.Start();



camera = new CameraController();

camera.addFramesListener(frameHandler);


public void frameHandler(short[] frame, int indicator)
{

     //handle new frame that arrived from the camera

     //trying to run a new thread from here
}

我希望线程将异步运行而无需等待线程完成

【问题讨论】:

  • 从问题中不清楚是什么问题。
  • 您的“TestMethod”是否包含以下代码行:camera = new CameraController(); camera.addFramesListener(frameHandler); ?
  • 如果你能提供更多关于你想从frameHandler内部调用的代码的细节,这可能会有所帮助。它是否特别需要在不同的线程上运行?该任务完成后应该发生什么?
  • 我注册了从相机到达的每个新帧。当一个新帧到达时,我实现了一个名为 frameHandler(short[] frame) 的处理程序。从那个处理程序(frameHandler)我想启动一个线程。但是这个线程会阻塞 frameHandler 而不是异步运行
  • Task.Run(() => FireAway());From this answerFireAway() 将在另一个可用线程上运行。需要注意的是,您调用的方法必须包含它自己的所有异常处理。您无法从启动任务的方法中捕获异常。

标签: c# multithreading delegates task


【解决方案1】:

试试这个:

public void frameHandler(short[] frame)
 {
    Task.Run(() => FireAway())
 }  

 void FireAway()
 {
    Thread.Sleep(5000);
 }

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多