【发布时间】:2011-02-10 00:50:23
【问题描述】:
我有一个应用程序 (.Net 3.5),它创建线程以将某些内容写入数据库,这样 GUI 就不会阻塞。所有创建的线程都被添加到一个列表中,这样我可以在应用程序关闭时等待(Thread.Join)每个线程(可能在应用程序关闭时并非所有线程都完成,因此应用程序必须等待它们)。 由于列表的原因,如果创建了太多线程(OutOfMemoryException),我会遇到一些严重的问题。我尝试从列表中删除已完成的线程,但不知何故这不起作用。 是否有更好的方法来管理线程列表,以便在它们完成后将它们删除?
编辑:似乎已修复它(每当添加线程时调用):
lock (m_threadLock)
{
m_threads.RemoveAll(x => x.ThreadState == ThreadState.Stopped);
}
【问题讨论】:
-
为什么不通过 BeginInvoke 使用 .net 托管线程池来更新用户界面?
-
线程不会更新 GUI,但用户可能想要停止进程或退出应用程序。
-
@Aseem:线程池没有解决等待直到完成的问题。
标签: c# multithreading