这个线程/后台工作程序是否为C#WPF应用程序设计好?

时间:2010-07-21 00:57:46

标签: c# .net wpf multithreading backgroundworker

在UI中使用线程等新手,请问以下简单设计似乎没问题。请参阅图image at link here

特别是:

a)使用backgroundworker& backgroundworker ProgressChanged让聚合器在单独的线程上工作。所以我需要一个自定义类/类型,其中包含我需要从聚合器线程传递回我假设的UI线程的所有数据。

b)在聚合器中创建一个单独的线程,以确保SharpPCap / WinPCap回调方法位于不同的线程中。因此,此Capture Manager线程将数据包结果写入共享缓冲区。我在这里假设,如果代码可以看到缓冲变量,他们都可以访问它,无论它们在哪个线程中运行?

感谢

1 个答案:

答案 0 :(得分:1)

我有几点建议:

  1. 我不建议使用BackgroundWorker和ProgressChanged。鉴于您希望每1秒“轮询和聚合”,我建议您只使用一个Timer(可能是DispatcherTimer)。您可以使用Dispatcher.BeginInvoke将调用封送回UI线程,如果您在单独的线程中运行(如果需要,还可以使用基于UI线程的计时器)。

  2. 我建议使用ConcurrentQueue<T>来保存您的数据包数据,而不是列表。这样可以防止您需要锁定列表。如果必须坚持使用.NET&lt; 4的版本,则可以使用List<T>,但是您需要同步对它的访问(锁定某个对象以保护列表中的读/写操作)。只要线程安全或正确同步,两个线程都可以使用相同的集合。