это то, что я сейчас делаю:
protected void setupProject()
{
bool lbDone = false;
int liCount = 0;
while (!lbDone && liCount < pMaxRetries)
{
try
{
pProject.ProjectItems.Item("Class1.cs").Delete();
lbDone = true;
}
catch (System.Runtime.InteropServices.COMException loE)
{
liCount++;
if ((uint)loE.ErrorCode == 0x80010001)
{
// RPC_E_CALL_REJECTED - sleep half sec then try again
System.Threading.Thread.Sleep(pDelayBetweenRetry);
}
}
}
}
теперь у меня есть блок try catch вокруг большинства вызовов материала EnvDTE, и он работает достаточно хорошо. Поскольку я не хочу запускать цикл foreach заново, если я получаю исключение RPC_E_CALL_REJECTED, я не уверен, что я могу сделать.
Отредактируйте, чтобы ответить на комментарий: Да, я автоматизирую VS из другой программы, и да, я обычно использую VS для чего-то еще одновременно. У нас есть приложение, которое читает XML-файл, а затем генерирует около 50 решений VS на основе XML-файла. Обычно это занимает пару часов, поэтому я стараюсь заниматься другой работой, пока это происходит.