我正在使用c#来开发一个占用大量位图的程序,将它们分成几部分并通过UDP发送它们。
我的问题是,表格会在我连续发送帧时冻结;这是有道理的,因为运行该表单的线程在此期间执行发送指令。为了解决这个问题,我试图使用一个与表单不同的线程,但是当我使用它时:
Thread sender = new Thread(SendAFrame);
for(int c = 0; c < arrayList.Count; c++)
{
Sender.Start();
}
我收到错误,因为多个线程与此代码同时执行。我怎么解决这个问题?请记住,使用线程不是必须的,也非常感谢替代解决方案。
提前致谢。
答案 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;
}
或者只是一个线程按顺序执行它们。