如何缓冲.net BackgroundWorker的输出?

如何缓冲.net BackgroundWorker的输出?,.net,c++,backgroundworker,buffering,.net,C++,Backgroundworker,Buffering,我有一个来自外部源的数据流,我目前在BackgroundWorker中收集这些数据。每次它获取另一个数据块时,都会使用ReportProgress调用将该数据呈现给GUI 我得到的印象是ProgressChanged函数只是一个同步机制,尽管如此,当我的工作线程调用它时,两个线程都被锁定,而GUI线程处理更改。所以我认为问题在于,当后台线程更新GUI时,它不能接收任何数据,这意味着我们丢失了一些数据包。这是对的还是我的数据包丢失更可能来自其他地方 如果这是原因,那么添加第二个线程来进行GUI更新

我有一个来自外部源的数据流,我目前在BackgroundWorker中收集这些数据。每次它获取另一个数据块时,都会使用ReportProgress调用将该数据呈现给GUI

我得到的印象是ProgressChanged函数只是一个同步机制,尽管如此,当我的工作线程调用它时,两个线程都被锁定,而GUI线程处理更改。所以我认为问题在于,当后台线程更新GUI时,它不能接收任何数据,这意味着我们丢失了一些数据包。这是对的还是我的数据包丢失更可能来自其他地方

如果这是原因,那么添加第二个线程来进行GUI更新是合理的解决方案,还是有更好/更彻底的方法来解决这些问题,我应该深入研究


任何想法和建议都是非常受欢迎的。

您可能必须在GUI线程中创建SynchronizationContext对象,以便能够使用其Post方法从BackgroundWorker异步发送消息。

工作线程只向GUI线程发送一条异步消息,这将导致GUI中触发事件。它不应该停止你的背景线程。这也不重要。如果用户决定启动另一个程序,GUI程序可能会暂停很长时间,等等


你不会谈论你正在使用什么样的流。因此,除非您正在接收UDP数据报(无论如何都不可靠),否则这里应该不会丢失数据。流是连续的。

这些事件是否以任何方式缓冲?是否GUI在添加另一个事件(替换第一个事件)之前没有处理第一个事件?或者这是标准windows消息泵的一部分?“流”是一个应该缓冲的TCP连接,因此问题的根源似乎更可能在其他地方。