在给定方案中有效实现线程

时间:2010-05-21 01:22:16

标签: winforms multithreading synchronization clr thread-safety

我有一个winforms应用程序,它按以下方式设置:2个按钮,一个文本框,一个类对象MX,其中集合K为其成员,函数X和另一个函数Y.

  1. 函数X解析大型数据库并枚举集合K中的一些数据。
  2. 按钮1调用功能X。
  3. 功能Y遍历上述集合并打印出文本框中的数据。
  4. 按钮2调用功能Y。
  5. 我想通过工作线程调用函数X,方式如下:

    1. 表单仍然响应用户输入。这本质上来自于使用单独的线程。
    2. 在任何时间点运行的函数X都不会超过一个。
    3. 两个功能都可以随时访问MX / K.
    4. 上述环境最有效的实施方式是什么?

1 个答案:

答案 0 :(得分:1)

当您按下按钮1时,您可以使用BackgroundWorker调用X以在单独的线程中运行它。然后设置一个变量(或灰色按钮1),以便用户不能再次运行X.

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

X完成后,您可以使用BackgroundWorker事件让UI知道操作已完成。然后重置相同的变量(或按钮),让用户知道他们现在可以再次运行X - 如果需要的话。

你怎么看?这有帮助吗?