我想开发 c# windows 应用程序,它每秒处理来自“收件箱”表的消息,然后处理它而不等待每个进程的结果。我一直在阅读 .net 中的多线程,但我仍然没有最好的方法来实现。执行这些要求的最佳方法是什么?
- 我是否已经运行线程计时器然后执行线程池?
- 或者我只使用线程计时器?
请给出您的意见和示例,以了解我应该实施的最佳方法。
谢谢你
我想开发 c# windows 应用程序,它每秒处理来自“收件箱”表的消息,然后处理它而不等待每个进程的结果。我一直在阅读 .net 中的多线程,但我仍然没有最好的方法来实现。执行这些要求的最佳方法是什么?
请给出您的意见和示例,以了解我应该实施的最佳方法。
谢谢你
有两种简单的方法。2号更简单,但如果您在 UI 线程上做大量工作,则1号更有可能准时。你也可以试试Reactive Extensions库,它更酷。
1)默认情况下, System.Timers.Timer将在线程池线程上引发 ellapsed 事件,这可能是合适的,但如果您使用的数据由发送消息循环的线程修改,则需要注意竞争条件。如果需要将数据推送回 UI 线程,则需要对其进行安排。
2) 使用在消息循环之外运行的计时器,例如DispatcherTimer,然后使用BackgroundWorker或任务并行库在另一个线程上执行工作。这些具有帮助您将结果编组回 UI 线程的机制。
您还需要注意,在完成处理上一个计时器事件的工作之前,计时器不会结束。