代码改变世界

无法保存webpart的属性设置,发生意外,异常来自 HRESULT:0x80020009(DISP_E_EXCEPTION)

2009-05-18 08:48  Virus-BeautyCode  阅读(3677)  评论(4编辑  收藏  举报

    还有就是今天发现的一个问题,我写了一些helper的类,比如说获取某一个列表存放的字典值,就是键值对,根据键获取值,开始我在这个方法中使用了

  using(SPSite site=SPContext.Current.Site)

  using(SPWeb web=SPContext.Current.Web)

{
    SPList list=............

    ............
}
}

    在用户控件中调用了这个helper类的方法之后,编译成功。添加这个webpart的时候,提示“无法保存webpart的属性设置,发生意外,异常来自 HRESULT:0x80020009(DISP_E_EXCEPTION)”的错误信息,后来经过断点跟踪,而且代码前天还没有问题,就是在添加了这个helper类就出问题了,我把这个类库生成的dll从bin目录删除,把获取键值对的代码写在webpart中就没有问题了,所以判断是上面这段代码出了问题。

    跟踪调试发现是在引用的方法中最好不要使用using来释放SPSite和SPWeb,应为在调用地方就是用了using来打开SPSite和SPWeb了,在传入方法之后,在方法中在写using的话,就会出现这个问题。然后所有的webpart都不能添加,也不能修改属性了。开始以为出了什么大问题,很是着急。

    其实也是using的错误使用,在帮助类的方法中不能释放外部的资源,否则外部继续使用的时候就会有问题,可能是因为被内部方法释放了,找不到的缘故吧,不知道理解的对不对呢?有知道具体原因的,可以告知我。

    想想这个错误,也可能不止sharepoint编程会碰到,在其他时候也可能会碰到,应该是编程 的方式方法出错了吧。