连续启动线程
本文关键字:线程 启动 连续 | 更新日期: 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();
}
我得到一个错误,因为不止一个线程与此代码同时执行。我该如何解决这个问题?请记住,使用线程不是必须的,我们也非常感谢一种替代解决方案。
提前谢谢。
您应该在单独的线程中启动发送循环,您可以使用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;
}
或者只有一个线程来按顺序执行所有操作。