2

我有一个带有输入文本框、按钮和多行输出文本框的 WinForms 应用程序。在文本框中输入根路径。按钮单击调用一个函数来递归检查所有子目录以进行一些正确的目录命名验证检查。结果输出到多行文本框中。

如果递归工作在单独的类中完成,我有两个选择:

  1. 跟踪类属性中不正确的目录(例如 ArrayList),完成后返回 ArrayList,并使用所有结果更新输出文本框。

  2. 传入 ByRef 输出文本框并为每个不正确的目录更新/刷新它。即使 1 和 2 是单线程的,但对于 2,我至少会根据目录更新我的结果。

如果递归工作在表示层完成,验证在单独的类中完成,我可以多线程。

哪种方式更清洁?

4

3 回答 3

2

您不需要传递 TextBox ByRef。它已经是一个参考对象。仅当您计划为引用分配不同的或新的 TextBox 时,传递 ByRef 才会产生效果。

如果你打算在一个单独的类中完成这项工作,它看起来就像将 TextBox 的内容作为字符串传递,然后将结果作为字符串或一组字符串(数组List<string>等)一样简单. 如果有一天您决定使用不同类型的控件来存储此信息,这比传入 TextBox 更好。

于 2008-10-24T15:15:43.840 回答
2

我会建议接近选项 1 的东西。我会有一个方法,将根目录作为输入并返回“坏”目录的列表。此外,我会在后台线程上调用该方法,以免在执行操作时挂起 UI。添加进度条或某种等待指示器,以便用户知道操作正在进行中。

将文本框传递给该方法将不允许您将该方法重用于其他任何事情。为了代码重用(如果这对您很重要),我认为简单地让方法返回一个列表并让回调方法弄清楚如何显示数据会更干净。

于 2008-10-24T15:16:57.567 回答
0

[不确定这是否是跟进原始问题的地方]

那么,是否可以肯定地说递归业务层函数将无法在每次递归迭代时更新表示级别控件?

于 2008-10-24T17:32:53.737 回答