我需要使用哪些线程的工作方法

本文关键字:线程 工作 方法 | 更新日期: 2023-09-27 18:27:37

我有一个音频播放器应用程序(c#.NET 4.0 WPF),它从网络上获取音频流并播放。该应用程序还显示波形和频谱,并将音频保存到本地磁盘。它还做了更多的事情。

我的问题是,当我从网上收到一个新的字节包,我需要播放它们(也许还需要将它们写入本地磁盘等)时,我需要使用线程吗?我试着用主线程做所有的事情,它似乎运行得很好。

我可以对连接中收到的每个字节数据包使用线程池。这是否合理?

我需要使用哪些线程的工作方法

为此,您可以使用任务并行库(TPL)。任务并行库(TPL)是.NET Framework版本4中System.Threading和System.Threading.Tasks命名空间中的一组公共类型和API。TPL的目的是通过简化向应用程序添加并行性和并发性的过程来提高开发人员的工作效率。TPL动态地扩展并发程度,以最有效地使用所有可用的处理器。此外,TPL还处理工作的分区、线程池上线程的调度、取消支持、状态管理和其他低级细节。

另一个选项(如果执行的操作运行时间足够长)是BackgroundWorker类。BackgroundWorker组件使您能够在不同于应用程序主UI线程的线程上异步("在后台")执行耗时的操作。要使用BackgroundWorker,只需告诉它在后台执行什么耗时的worker方法,然后调用RunWorkerSync方法。当工作方法异步运行时,调用线程将继续正常运行。方法完成后,BackgroundWorker通过触发RunWorkerCompleted事件向调用线程发出警报,该事件可选地包含操作的结果。如果你有很多操作要按顺序进行,这可能不是你的最佳选择。

下一个在很大程度上被TPL取代的替代方案是线程类。这在TPL中并不容易使用,您可以使用TPL做任何事情,就像使用线程类一样(几乎如此),而且TPL对用户更友好。

我希望这能有所帮助。

我建议使用两个线程:在一个线程中,您从web下载数据包并将其放入队列(如果您使用异步下载操作,则可以是UI线程),在另一个线程中将分析队列并处理其中的数据包。