ASP.Net C#Active Directory:在每次DirectoryEntry.MoveTo()调用后继承了一个应用程序,其中包含thread.sleep()

ASP.Net C#Active Directory:在每次DirectoryEntry.MoveTo()调用后继承了一个应用程序,其中包含thread.sleep(),c#,active-directory,C#,Active Directory,所以我正在开发这个应用程序,它是由其他不再参与这个项目的人开发的。正如标题中所述,有几个thread.sleep()调用让我抓狂。我没有与广告公司合作的经验 最严重的违规者是在继承原则的类中睡眠50秒的人 public class Computer:ComputerPrinciple { ... public void MoveToOu(string ou) { var userObject = (DirectoryEntry)GetUnderlyingO

所以我正在开发这个应用程序,它是由其他不再参与这个项目的人开发的。正如标题中所述,有几个thread.sleep()调用让我抓狂。我没有与广告公司合作的经验

最严重的违规者是在继承
原则的类中睡眠50秒的人

public class Computer:ComputerPrinciple
{
    ...
    public void MoveToOu(string ou)
    {
        var userObject = (DirectoryEntry)GetUnderlyingObject();
        var newParentOu = new DirectoryEntry("LDAP://" + ou);

        userObject.MoveTo(newParentOu);

        Thread.Sleep(50000);
        userObject.Close();
        newParentOu.Close();
    }
    ...
}
没有什么可以解释原因,但我怀疑这是在完全提交更改之前刷新页面的问题(?)。我非常确定的一点是,
Thread.Sleep(50000)
不是解决我们遇到的任何问题的正确方法

我想听听对此有经验的人的意见,如果确实存在某种问题,这将“解决”,那么解决方案将是什么

此外,我认为我应该使用“using”指令,但我想知道如何处理
underyingobject
,或者干脆关闭它,因为这段代码是从这样的地方调用的,其中计算机是移动代码的原理

  computer.UpdateComputerDescription(collection);
  computer.UpdateComputerOu(collection);   <--- offending MoveToOu method is called in here
  computer.UpdateComputerIsActivedProperty(collection);
  computer.Save();
computer.UpdateComputerDescription(集合);

computer.UpdateComputerOu(集合) 使用
Thread.Sleep
可能是不调用
CommitChanges
的一种解决方法

如果UsePropertyCache为true,则对新对象调用CommitChanges方法以使移动永久化

看起来他们在等待缓存使用经验延迟刷新


其次,在
中使用
将您创建的任何
IDisposable
包装到
中的
移动到
中不会破坏任何内容。这是正确的方法。在
MoveToOu
范围内使用但未创建的对象不应在此处处理,而应留给容器类处理机制处理。

据我所知,MoveToOu只接受一个字符串参数,根本不使用
collection
?-->因此,无论您在
MoveToOu
中创建和处理什么,都不会影响调用代码时的对象。@dlatikay我没有在UpdatecomputerOu中发布代码,但其中有一些内容可以提取OU并调用MoveToOu方法。谢谢您的回答。我读过这篇文章,但它并没有真正发出咔哒声,我也不确定它是否让我走错了方向。我刚刚运行了一个测试,UsePropertyCache确实是正确的。关于使用,请澄清一下(DirectoryEntry)myPrinciple.getUnderlineingObject()是否创建了一个新对象?