连续启动线程

本文关键字:线程 启动 连续 | 更新日期: 2023-09-27 18:25:58

我正在使用c#开发一个程序,该程序使用大量位图,将它们分割成块,并通过UDP发送。

我的问题是,当我连续发送帧时,Form会冻结;这是有意义的,因为表单运行的线程在此期间执行send指令。为了解决这个问题,我试图使用一个与表单不同的线程,但当我使用这个线程时:

Thread sender = new Thread(SendAFrame);
for(int c = 0; c < arrayList.Count; c++)
{
   Sender.Start();
}

我得到一个错误,因为不止一个线程与此代码同时执行。我该如何解决这个问题?请记住,使用线程不是必须的,我们也非常感谢一种替代解决方案。

提前谢谢。

连续启动线程

不要为每个"消息"启动一个线程。启动一个发送所有消息的线程。IOW将循环移到线程中。

您应该在单独的线程中启动发送循环,您可以使用Task类来实现它。

var task = Task.Factory.StartNew(() => 
{
  for(int c = 0; c < arrayList.Count; c++)
  {
    SendAFrame(c);
  }
});

使用Join方法查找线程何时结束。在结束该线程Start之后,另一个线程:

for(int c = 0; c < arrayList.Count; c++)
{
    Sender.Start();  
    Sender.Join();
}

您可以为列表中的每个项目启动一个线程

for(int c = 0; c < arrayList.Count; c++)
{
   Thread thrd = new Thread(new ParameterizedThreadStart(StratMe));
   thrd.Start(i);
}
 private void StratMe(object obj)
  {
     int i = (int) obj;
  }

或者只有一个线程来按顺序执行所有操作。