Working with HwndSource from BackgroundWorker

本文关键字:BackgroundWorker from HwndSource with Working | 更新日期: 2023-09-27 18:30:49

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

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

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

Working with HwndSource from BackgroundWorker

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

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

ThreadProcThreadStartdelegate

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

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

相关文章:
  • 没有找到相关文章