0

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

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

谁能帮我解决这个问题?
谢谢你。

4

3 回答 3

0

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

于 2012-04-12T17:31:35.503 回答
0

使用单独的线程时,它们需要位于 STA(单线程单元)中,而后台工作线程则不是这种情况。您可能必须按照此答案中的说明自己创建线程

Thread t = new Thread(ThreadProc); 
t.SetApartmentState(ApartmentState.STA); 
t.Start(); 

ThreadProc作为一个delegate类型ThreadStart

于 2012-04-12T17:32:29.777 回答
0

听起来它正在工作,除非您尝试更新进度控件。在 BW 的 ProgressChanged 事件中,如果您尝试直接更新控件,则可能会遇到您遇到的错误。由于您使用的是 MVVM,因此在 ProgreeChanged 事件中,您应该更新绑定到进度控制的视图模型属性,如果您还没有这样做的话。

于 2012-04-12T17:49:04.023 回答