最近我们的WPF / Entity Framework 4.0应用程序在我们开始使用backgroundworkers以便从实体加载数据后变得不稳定。我们这样做是为了让BG工作人员从数据库中检索数据时运行'Please Wait'-spinner图形,但我们在随机时间开始遇到许多与EF相关的连接问题和其他无法解释的错误。来自Microsoft EF团队成员的帖子似乎表明EF不是“线程安全的”,一旦我们删除了BG工作人员,问题确实消失了。
这给我们留下了一个UI体验问题 - 我们不再有一个用户友好的'Please-Wait'微调器在数据加载时运行。在没有将数据加载到BG工作者的情况下,是否有人对其他方式有任何建议?
由于
答案 0 :(得分:5)
您可以采取中间步骤。而不是BackgroundWorker,创建一个运行直到您的应用程序关闭的线程。该线程创建您的连接并处理所有数据库通信。向其发布消息,让它完成工作,然后收到结果。它将释放UI,同时防止多个线程同时使用EF。
答案 1 :(得分:1)
之前我曾经使用过BackgroundWorkers,它们真正意味着在后台完成委托给他们的任务,引发与任务相关的事件,并在完成时死亡。最常见的示例是从后台线程更新进度条。 UI元素只能从UI线程更新,因此需要在UI线程上引发事件的BackgroundWorkers。
让BackgroundWorker做一些需要持久化的事情,比如通过数据库连接进行的操作,似乎只会因为它们的短暂性而引起麻烦。