Активация возможности (feature) после полного создания сайта

По-умолчанию возможности SharePoint активируются в случайном порядке и могут вызываться до того момента, как сайт полностью воссоздан из шаблона.

Для того, чтобы выполнить код активации возможности после полного создания сайта можно использовать следующий пример класса обработчика активации:

public class MyFeatureReciever : SPFeatureReceiver
{

public override void FeatureActivated(SPFeatureReceiverProperties properties)

{
            SPSite site                                = properties.Feature.Parent as SPSite;
            if (null == site)
                return;
            // Создать поток исполнения
            ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), new Pair(properties.Feature.Definition.RootDirectory, site.ID));
}

static private void DoWork(Object obj)
{
            String rootDirectory                    = (String)((Pair)obj).First;
            Guid siteId                                = (Guid)((Pair)obj).Second;
            // Пустой цикл пока не создастся сайт
            while (true)
            {
                using (SPSite site = new SPSite(siteId))
                {
                    using(SPWeb web = site.OpenWeb())
                    {
                        if(true == web.Provisioned)
                            break;
                    }
                }
                Thread.Sleep(100);
            }
            // Внести изменения
            using (SPSite site = new SPSite(siteId))
            {

                 DoMyTasks();
            }
}

}