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

在给定场景中高效地实现线程

  •  0
  • shadeMe  · 技术社区  · 15 年前

    我有一个WinForms应用程序,它是按如下方式设置的:2个按钮、一个文本框、一个集合k作为成员的类对象mx、函数x和另一个函数y。

    1. 函数x解析一个大型数据库,并在集合k中枚举它的一些数据。
    2. 按钮1调用函数X。
    3. 函数y遍历上述集合并在文本框中打印出数据。
    4. 按钮2调用函数Y。

    我想通过工作线程调用函数x,方法如下:

    1. 表单仍然响应用户输入。这本质上是由于使用了单独的线程。
    2. 在任何时间点上运行的函数x实例都不超过一个。
    3. MX/K可随时由两个功能访问。

    上述环境最有效的实现是什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Justin Ethier    15 年前

    按下按钮1时,可以使用 BackgroundWorker 在一个单独的线程中运行它。然后设置一个变量(或灰显按钮1),这样用户就不能再次运行x。

    X可以在处理数据库时写入自己的集合。然后它可以用这个集合替换一个实例变量。通过只做一次替换,您可以避免X和UI线程之间的同步问题。

    X完成后,可以使用 背景工作者 事件以让用户界面知道操作已完成。然后你重置相同的变量(或者取消按钮的键),让用户知道他们现在可以再次运行x-如果必要的话。

    你怎么认为?这有帮助吗?