2015-10-31 3 views
0

Я пытаюсь вызвать сценарий bash из Mono. Поскольку сценарий, в свою очередь, вызывает «pico2wave» (Linux-реализация голоса Pico TTS от Android), вызов сценария должен блокировать выполнение Mono-кода.Mono: Как выполнить сценарий оболочки в блокирующем режиме?

Я мог бы, конечно, изменить сценарий, чтобы коснуться/rm файла, работающего как блокировка, но есть ли способ выполнить эту задачу в моно-коде?

Спасибо за любые советы,

Карстен

ответ

0

Вы можете использовать Process.WaitForExit ждать (блок) до сценарий завершения выполнения.

Process.WaitForExit Method

Устанавливает период времени ожидания для соответствующего процесса, чтобы выйти, и блокирует текущий поток выполнения, пока время не истекло или процесс завершился. Чтобы избежать блокировки текущего потока, используйте событие «Выход».

Пример скрипт, который спит в течение 5 секунд, а затем выходит, названный shell-block.sh:

#!/bin/bash 
sleep 5 
exit 0 

Пример C#:

using System; 
using System.Diagnostics; 

namespace consoleblocking 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Console.WriteLine ("Non-blocking"); 
      Process.Start ("./shell-block.sh"); 

      Console.WriteLine ("Blocking"); 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.FileName = "./shell-block.sh"; 
      startInfo.Arguments = ""; 
      using (var myProcess = Process.Start(startInfo)) 
      { 
       myProcess.WaitForExit(); 
      } 
     } 
    } 
} 
+0

Идеальное решение! Спасибо! *палец вверх* –