我有一个类似于PictureBox控件的图像显示控件,它需要一个位图并显示它。问题是我的控件会天真地尝试执行需要访问它的图像域的操作,即使已提供的位图已被丢弃。假设我有一个带有图像显示控件的窗体。我已经将Image属性设置为从文件加载的图像,然后出于某种原因(图像处理的原因和方式无关紧要)。然后我做了一些事情来重绘图像控件,当它试图访问现在处理的位图时,它会向左和向右抛出InvalidArgumentException。我理解这个问题,但对解决方案并不是100%信心。防止访问处置的参考
我的图像显示控件无法控制图像引用是否由调用代码处理,而且我没有公开的方法来检查对象是否被丢弃。我能想到的两种可能的解决方案:
- 存储位图在我的图像控制的副本(即克隆()所提供的图像),那么它不会不管发生什么事源图像。我认为这是最好的解决方案。
- 包装一切我可以在try/catch语句中想到 - 这是一个糟糕的选项,我只是为了防止其他人提出这个问题而将其包含在内。
在我执行选项#1(我认为最有意义的)之前,我想我会问这里是否有处理这种情况的最佳做法。
感谢您的确认!我要制作本地副本,似乎是最合乎逻辑的方法。 – 2010-11-08 21:41:37
你可能没有意识到这一点,但我们的答案基本相同。我只是觉得构造函数是表示这个想法的最简单的方法。事实上我很清楚参数少的构造函数的要求。 – ChaosPandion 2010-11-08 22:38:07
@ChaosPandion得分10k +我相信你知道。它只是不禁不喜欢你的答案(虽然没有给-1)。 – Aliostad 2010-11-08 22:44:03