代码之家  ›  专栏  ›  技术社区  ›  Dan McClain

创建取消方案

  •  1
  • Dan McClain  · 技术社区  · 17 年前

    我有一个分析源代码的程序。它可以递归地遍历一个目录以查找所有项目,然后递归地遍历该项目以查找所有源代码。

    问题在于如何编辑我的代码,以便它可以检查该项并返回GUI。解析过程涉及几个方法。

    在一个小得多的过程中,我成功地使用了一个线程安全的单例,它有一个bool,表示是否已请求取消,并在运行循环的地方停止循环。

    在我的代码中处理此取消请求的最佳方法是什么?

    编辑:这里有一个想法,灵感来自约翰·桑德斯的答案。

    如果我在处理线程中运行一个后台线程来监视Cancel Singleton的更改,然后从该进程中抛出一个异常,该怎么办?这似乎是一种好的做法吗? 这不符合预期

    4 回复  |  直到 17 年前
        1
  •  2
  •   John Saunders    17 年前

    您可能会发现在这些点抛出异常非常有用。异常应该是在到达代码和UI之间的边界之前不会被代码捕获的异常。此时,您的代码将简单地返回。

        2
  •  0
  •   MartinStettner    17 年前

    Thread.Abort() 函数在后台工作线程上运行。这就抛出了一个 ThreadAbortException catch 阻碍。

    也都 finally -将执行块。

        3
  •  0
  •   Steve    17 年前

    然后,您可以在UI线程中修改该对象(例如更新布尔取消属性),并从后台进程定期检查该对象。

        4
  •  0
  •   Jeff Yates    17 年前

    执行线程操作的取消有多种方式;所有这些都涉及定期检查标志或其他值,以确定线程是否应继续运行。

    相反,您可以使用一个简单的、线程安全的布尔标志作为可从任何线程访问的类的静态成员,或者使用一个同步对象,例如命名的 Mutex . 向同步对象发送信号将允许线程知道它必须取消。