使用BackgroundWorker中的HwndSource

时间:2012-04-12 17:23:42

标签: c# wpf mvvm backgroundworker

我真的很绝望。我有WPF MVVM应用程序,我通过USB发送和接收一些数据包。我使用了一个库,这个库需要HwndSource。一切正常,但现在我需要发送很多数据包,这需要一些时间,所以我决定使用BackgroundWorker并显示ProgressBar,但我不知道如何在BackgroundWorker中使用HwndSource,因为我收到了这个错误:

  

调用线程必须是STA,因为许多UI组件都需要这个。

任何人都可以帮我解决这个问题吗? 谢谢。

3 个答案:

答案 0 :(得分:0)

您可以将您的UI线程中的HwndSource传递给BackgroundWorker吗?如果是这样并且它不会导致任何性能问题,那将是最简单的。如果这会导致性能问题,那么最好的办法就是创建自己的STA线程并在那里工作,而不是使用BackgroundWorker

答案 1 :(得分:0)

当使用单独的线程时,它们需要位于STA(单线程单元)中,而后台工作线程不是这种情况。您可能需要按照in this answer

所述自己创建线程
Thread t = new Thread(ThreadProc); 
t.SetApartmentState(ApartmentState.STA); 
t.Start(); 

ThreadProcdelegate类型的ThreadStart

答案 2 :(得分:0)

除非您尝试更新进度控件,否则听起来很有效。在BW的ProgressChanged事件中,如果您尝试直接更新控件,则可能会遇到您遇到的错误。由于您正在使用MVVM,因此在ProgreeChanged事件中,如果您尚未执行此操作,则应更新绑定到进度控制的视图模型属性。