在表单上调用close然后再次调用close是否安全。第一次关闭后没有其他操作正在进行。
我怀疑这是不好的,它实际上是在争夺第二次关闭? (并且赢得99.999%的时间,所以我没有看到任何错误)
编辑:要清楚这是恕我直言的一个错误,但它目前没有引起任何异常被抛出。问题是它的问题有多大?我应该修复我发现的那个并继续前进,因为它相对温和,或者我应该检查设计中的每个表格,以确保没有任何类似的问题,因为缺少异常可能取决于GC的行为。
答案 0 :(得分:4)
第二个调用不再关闭本机窗口了,它已经消失了。它将再次调用Dispose()。没关系,所有.NET类都支持多次处理对象。
这些都与垃圾收集器无关,显然你仍然可以引用表单对象,或者你无法调用Close()。不要永远保留此引用,否则您将泄漏表单对象。它已经死了,无法恢复。引用该表单对象的成员往往会抛出ObjectDisposedException。
答案 1 :(得分:1)
它应该是固定的,但它可能不是一个重要的优先事项。问题是,在修改应用程序或使用更新版本的.net之后,它可能在将来导致异常或奇怪的行为。换句话说,这不安全。
答案 2 :(得分:0)
在已经关闭的表单上调用Close()
表明您应该重新考虑一些设计问题。但是,我不知道这会导致任何问题。
您可以使用Reflector查看close的确切位置。但我很确定它会检查表单是否实际打开。
答案 3 :(得分:0)
没有确定的方法可以知道GC正在做什么。如果你有一个表单并且两次调用Close()
并且没有抛出异常(Null或Disposed),那么问题出在哪里?没有任何“赛车”条件。
我的问题是,“为什么首先有2次调用Close()?”