4

最近我们的 WPF/Entity Framework 4.0 应用程序在我们开始使用后台工作程序从实体加载数据后变得不稳定。我们这样做是为了在 BG 工作人员从数据库中检索数据时运行“请稍候”微调器图形,但我们开始随机遇到许多与 EF 相关的连接问题和其他莫名其妙的错误。Microsoft EF 团队成员的一篇帖子似乎暗示 EF 不是“线程安全的”,一旦我们删除了 BG 工作人员,问题确实消失了。

这给我们留下了一个 UI 体验问题——我们不再有一个很好的用户友好的“请等待”微调器在数据加载时运行。有没有人对在不将数据加载到 BG 工作人员中的情况下可以完成此操作的其他方式有任何建议?

谢谢

4

2 回答 2

5

您可以采取中间步骤。代替 BackgroundWorker,创建一个在您的应用关闭之前一直运行的线程。该线程创建您的连接并处理所有数据库通信。向它发布消息,让它完成工作,然后接收结果。它将释放 UI,同时防止多个线程同时使用 EF。

于 2010-10-04T17:16:44.123 回答
1

我以前使用过BackgroundWorkers,它们实际上是为了在后台执行委派给他们的任务,引发与任务相关的事件,并在完成时死亡。最常见的示例是从后台线程更新进度条。UI 元素只能从 UI 线程更新,因此在 UI 线程上引发事件的 BackgroundWorkers 是可取的。

让 BackgroundWorker 做一些需要持久性的事情,比如通过数据库连接进行的操作,似乎纯粹因为它们的瞬态特性会造成麻烦。

于 2010-10-04T18:05:27.080 回答