Aid*_*anO 1 c# browser dispose
是否可以测试是否已经处理了WebBrowser.Document以便我不会继续获取ObjectDisposedException?
我知道下面的代码可以完成这项工作,但是我更愿意测试文件是否被处理而不是必须抓住它.有什么想法吗?
private Size GetContentSize()
{
try
{
if (
this.webBrowser.Document != null
&&
this.webBrowser.Document.Body != null)
{
return this.webBrowser.Document.Body.ScrollRectangle.Size;
}
else
{
return Size.Empty;
}
}
catch (ObjectDisposedException)
{
return Size.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 10
坚持一分钟.您提出问题的事实表明您的设计存在根本缺陷.你为什么要坚持一个可能已被处置的物体? 那就是问题所在.您不应该回答"我怎么知道它是否被处置?"这个问题.如果您有对该对象的引用,则它尚未处理.如果你已经处理掉了,那么你应该抛弃你对它的所有引用.
相反,如果其他人有引用并且不知道您已经处理它,那么您不应该处置它,仍然使用该对象的代码有责任处置它.
您需要的是一份合同,描述谁拥有此对象以及何时将其处置,然后实施该合同.如果您这样做,那么您将知道该对象是否已被处置,并且该异常将指示违反合同的错误.
这是我之前写的一篇关于相关问题的文章:
http://blogs.msdn.com/b/ericlippert/archive/2008/09/08/high-maintenance.aspx
WebBrowser.Document的类型是HtmlDocument.它没有Dispose()方法.
更可能的异常来源是WebBrowser本身.它具有您可以使用的IsDisposed属性.但是,我强烈建议你去寻找代码中的错误而不是应用那个bandaid.也许是一个流浪的使用陈述.
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |