不断启动一个线程

时间:2013-08-01 13:08:43

标签: c# multithreading

我正在使用c#来开发一个占用大量位图的程序,将它们分成几部分并通过UDP发送它们。

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

Thread sender = new Thread(SendAFrame);

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

我收到错误,因为多个线程与此代码同时执行。我怎么解决这个问题?请记住,使用线程不是必须的,也非常感谢替代解决方案。

提前致谢。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

你可以这样做为列表中的每个项目开始一个线程

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;
  }

或者只是一个线程按顺序执行它们。