最近在使用MOSS列表的EventHandler,在列表发生跟新事件的时候,修改列表中的内容,再次更新列表项逻辑上会出现死循环的现象,但MOSS好像通过一种方式组织了死循环的发生,虽然可以在ItemUpdated中对列表再次进行更新,如下代码:
Code
ItemUpdated
public override void ItemUpdated(SPItemEventProperties properties)
{
SPListItem item = properties.ListItem;
item["Title"] = "abc";
item.Update();
}
但是代码执行的时候页面明显会慢很多,原因就是那个死循环搞的,不过页面并没有出现错误,就是会特别慢,从网上查到的资料是说MOSS自己在死循环执行10次以后,自行了断了。
有人给出了一个解决的方法,就是在执行更新的时候,把事件监听程序关掉,执行完更新操作后再将其开启,这样就绕过了死循环,代码如下:
Code
ItemUpdated
public override void ItemUpdated(SPItemEventProperties properties)
{
SPListItem item = properties.ListItem;
item["Title"] = "abc";
///先关闭掉事件监听
this.DisableEventFiring();
item.Update(); //此时列表项目的更新不会再被ItemUpdated(SPItemeventProperties properties)方法拦截。
///执行更新完毕后在将监听开启
this.EnableEventFiring();
}