gpt4 book ai didi

c# - 从多个工作线程 (.NET) 更新 UI

转载 作者:太空狗 更新时间:2023-10-29 21:00:13 24 4
gpt4 key购买 nike

我有一个我正在处理的宠物项目,它有多个工作线程。将所有内容输出到控制台越来越难以理解,因此我想开发一个每个线程都有一个输出区域的 UI。我想知道线程向 UI 发送更新的最佳方式。我有两个想法:

1) 当新数据可用时让每个线程设置一个“DataUpdated”标志,并让 UI 定期检查新数据。

2) 创建每个线程,并回调 UI Update(...) 方法,以便在新数据可用时调用。

我目前倾向于 (2),原因有二:我不喜欢“检查”每个线程的想法,因为这是我的第一个多线程应用程序,而且 (2) 看起来比实际情况要简单。我想知道:

  • 就简单性和效率而言,哪个选项更可取?
  • 对于实现 (2) 或类似的东西(即更多事件驱动),您有什么建议吗?

最佳答案

您可以通过创建 BackgroundWorker 组件并在其 DoWork 处理程序中完成工作来轻松实现 (2):

BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += /* your background work here */;
bw.ProgressChanged += /* your UI update method here */;
bw.RunWorkerAsync();

每个 BackgroundWorker 都可以通过调用 ReportProgress 向 UI 线程报告进度:虽然这主要是为报告有界进程的进度而设计的,但这不是强制性的——如果这是您的 UI 更新所需要的,您也可以传递自己的自定义数据.您将从 DoWork 处理程序调用 ReportProgress。

BackgroundWorker 的好处在于它会为您处理很多杂乱的跨线程细节。它还符合您(正确地)更喜欢显式回调的事件驱动更新模型。

关于c# - 从多个工作线程 (.NET) 更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com