Ad 2: I managed to wait for the result of the check in a loop:
var validationId = package.Validate(false, PackageInfo.ReferenceUsage.UseAllReferences, null);
ValidationOperation validation = package.Parent.Parent.Parent.Validations[validationId];
do
{
Thread.Sleep(1000);
validation.Refresh();
}
while (!validation.Completed);
source
share