代码之家  ›  专栏  ›  技术社区  ›  RedPanda

后台工作程序C#winform

  •  6
  • RedPanda  · 技术社区  · 14 年前

    从后台工作人员加载所有内容是个坏主意吗?? 当前代码在窗体加载时执行。我们正在从webservice获取大量数据。一些长期运行的工作是在后台工作。

    要在后台工作程序中运行的每个函数? 或者这会让代码变得凌乱和可怕。

    7 回复  |  直到 14 年前
        1
  •  2
  •   hemp    14 年前

    代码的大小不是确定是否在单独线程上执行工作的度量。最坏情况下的执行长度是。

    • 在直接响应用户操作打开窗体之前启动该工作。
    • 将所有工作移到后台,并将结果异步更新(绑定?)到表单。
    • 延迟工作,直到用户具体执行某些需要它的操作。

    BackgroundWorker只是异步执行工作的一种机制,还有许多其他机制。你应该选择一个最适合每种情况。

        2
  •  1
  •   Robert Harvey    14 年前

    BackgroundWorker 通常用于使Winforms UI更具响应性。您可以在web应用程序中使用它进行后台处理,但我不能;我用一个 ThreadPool 在Windows服务中。

        3
  •  1
  •   Justin    14 年前

    最好将可能长时间运行的代码粘贴到后台工作程序中,这样应用程序就可以保持响应,但无需 一切 作为背景工作者。

        4
  •  1
  •   Russell    14 年前

    后台工作线程将需要额外的时间来创建和销毁后台工作线程。如果是一小段代码(处理方面),那么使用主UI线程可能会更快。

    如果可维护性是关键,那么使用后台工作人员进行处理可能是解决方案。自动处理细节的自定义框架可能会使代码更易于维护。

    这取决于几个因素:

    • 小/大代码段的数量-这将影响同时运行的线程数。
    • 响应性和性能对于应用程序的重要性
    • 应用程序的可维护性/可伸缩性的重要性。
        5
  •  1
  •   µBio    14 年前

    此外,在webforms中(因为您提到了页面加载),IIRC将与asp.net共享线程池,并且您可能会导致应用程序在某些并发请求/用户阈值下整体响应性降低。

        6
  •  1
  •   Paul Keister    14 年前

    就我个人而言,我不会将代码放入工作线程,除非包含特定进程的代码干扰了UI响应性。我没有理由认为把一切都放在一个工作线程上。一般来说,只有在等待外部资源(如web服务)时才会出现响应问题(除非您在表单\u Load:-)上计算素数)。

    如果您还没有研究过异步web服务调用,我建议您看看。异步调用将为您处理线程-总是一件好事。

        7
  •  0
  •   Doug    14 年前

    好好享受!