2013-06-19 4 views
3

У меня есть PSCmdlet, написанный на C# и .NET 3.5, который вызывает несколько других команд, которые определены в пределах того же Cmdlet.PSCmdlet, вызывающий другую команду, зависает из-за длительного времени обработки?

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

Поскольку эта команда занимает так много времени, и класс PowerShell запускает их синхронно, консоль замерзает тем временем.

Это нормально, но через несколько минут Windows предположит, что он разбился и вытолкнул консоль PowerShell. Как я могу избежать этого?

Вот как я бегу команду:

PowerShell ps = PowerShell.Create(); 
ps.Commands.AddCommand("Start-CrawlAndRunSearchCatalog").AddParameter("configFilePath", this.configFilePath); 

foreach (string str in ps.AddCommand("Out-String").Invoke<string>()) 
      this.WriteObject(str); 

ответ

0

Может быть, это?

var thread = new Thread(() => 
{ 
    PowerShell ps = PowerShell.Create(); 
    ps.Commands.AddCommand("Start-CrawlAndRunSearchCatalog").AddParameter("configFilePath", this.configFilePath); 

    foreach (string str in ps.AddCommand("Out-String").Invoke<string>()) 
     this.WriteObject(str); 
}); 

thread.Start(); 
thread.Join();