Clear controls does not dispose them - what is the risk?

前端 未结 3 1430
遇见更好的自我
遇见更好的自我 2020-11-29 11:15

There are multiple threads(a, b, c etc.) about the fact that Clear() ing items in the .NET component containers does not Dispose them(by ca

3条回答
  •  生来不讨喜
    2020-11-29 12:11

    @Hans Passant answer is good but in case of asynchronous programming you should consider to remove the object before dispose it to avoid some thread to iterate over a disposed object.

    More or less something like this:

    public static class ExtensionMethods {
      public static void Clear(this Control.ControlCollection controls, bool dispose) {
        for (int ix = controls.Count - 1; ix >= 0; --ix) {
          var tmpObj = controls[ix];
          controls.RemoveAt(ix);
          if (dispose) tmpObj.Dispose();
        }
      }
    }
    

提交回复
热议问题