gpt4 book ai didi

c# - BackgroundWorker 最佳实践

转载 作者:行者123 更新时间:2023-11-30 22:28:46 25 4
gpt4 key购买 nike

我正在制作我的第一个 C# GUI。它使用 BackgroundWorker 来运行计算量大的模拟。模拟会定期报告(通过 ProgressChanged 事件)需要在 GUI 中显示的大量信息。

GUI 分为多个控件,我希望每个控件都知道如何“ self 更新”。

在我的研究中,我发现有很多方法可以做到这一点。

  • 我能想到的是让 ProgressChanged 的方法在 GUI 的每个部分调用一个更新方法。
  • 我可以Invalidate GUI 并将每个控件更新方法绑定(bind)到Validating 事件。
  • 我可以将每个控件的更新方法绑定(bind)到 ProgressChanged 事件。
  • 我可以让每个控件实现 INotifyPropertyChanged 接口(interface)(但我怀疑这是否可行)

在所有这些选项中,哪个是根据 ProgressChanged 事件更新整个 GUI 的最佳实践? (或者我在左外野?)

来自评论:

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Simulation simulation = new Simulation();
while(true)
{
simulation.RunIteration();
backgroundWorker.ReportProgress(-1, simulation);
}
}

最佳答案

您不必做任何特别的事情。

您的 ProgressChanged 处理程序可以“解压”数据并设置控件的相关属性。失效和重绘是自动的,它在 GUI 线程上运行。

您只应注意更新“过于频繁”。多久一次取决于数据量,处理程序应该在下一次更新之前完成。如果没有,建立一些节流机制。

关于c# - BackgroundWorker 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622385/

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