0

我有一个来自外部源的数据流,我目前在BackgroundWorker. 每次它获得另一块数据时,它都会使用ReportProgress()调用将该数据呈现给 GUI。

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

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

非常欢迎任何想法和建议。

4

2 回答 2

0

工作线程只是向 gui 线程发送一条异步消息,这将导致在 GUI 中触发一个事件。它不应该停止您的后台线程。(无论如何这都不重要。如果用户决定启动另一个程序等,您的 GUI 程序可能会停止很长时间)

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

于 2009-06-25T10:48:07.867 回答
0

您可能必须在您的 GUI 线程中创建一个 SynchronizationContext 对象才能使用它的 Post 方法从您的 BackgroundWorker 异步发送消息。

于 2009-06-25T10:46:36.137 回答