我有一个带有输入文本框,按钮和多行输出文本框的WinForms应用程序。 在文本框中输入根路径。按钮单击调用函数以递归方式检查所有子目录以进行一些正确的目录命名验证检查。 结果将输出到多行文本框中。
如果递归工作是在一个单独的类中完成的,我有两个选择:
跟踪类属性中的不正确目录(例如ArrayList),完成后返回ArrayList,并使用所有结果更新输出文本框。
传入ByRef输出文本框并为每个不正确的目录更新/刷新它。 尽管1& 2是单线程,有2个,我至少会在每个目录中更新我的结果。
如果递归工作在表示层完成,并且验证是在一个单独的类中完成的,我可以多线程。
哪种方式比较干净?
答案 0 :(得分:2)
您不需要传递TextBox ByRef。它已经是一个参考对象。如果您计划为引用分配不同的或新的TextBox,则传递它ByRef只会产生影响。
如果你要在一个单独的类中完成工作,它就像将字符串的内容作为字符串传递,并将结果作为字符串或一组字符串(数组或{ {1}}之类的。这比传递TextBox更好,以防有一天你决定使用不同类型的控件来存储这些信息。
答案 1 :(得分:2)
我建议接近选项1的东西。我会有一个方法,它将根目录作为输入,并返回一个“坏”的目录列表。此外,我会在后台线程上调用该方法,以便在执行操作时不挂起UI。添加进度条或某种等待指示器,以便用户知道操作正在进行中。
将文本框传递给方法不允许您将该方法重用于其他任何方法。为了代码重用(如果这对你很重要),我认为简单地让方法返回一个列表并让回调方法弄清楚如何显示数据会更简洁。
答案 2 :(得分:0)
[不确定这是否是跟进原始问题的地方]
那么,在每次递归迭代时,递归业务层函数是否无法更新表示级控件是否安全?