1

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

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

Thread sender = new Thread(SendAFrame);

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

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

提前致谢。

4

4 回答 4

2

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

于 2013-08-01T13:13:00.030 回答
1

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

var task = Task.Factory.StartNew(() => 
{
  for(int c = 0; c < arrayList.Count; c++)
  {
    SendAFrame(c);
  }
});
于 2013-08-01T13:28:31.263 回答
0

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

for(int c = 0; c < arrayList.Count; c++)
{
    Sender.Start();  
    Sender.Join();
}
于 2013-08-01T13:13:42.317 回答
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;
  }

或仅一个线程按顺序执行所有操作。

于 2013-08-01T13:15:56.403 回答