2013-07-25 16 views
0

我被賦予了每天晚上對一堆GoToMeeting視頻文件進行轉碼的任務。一旦視頻已被轉碼,它將被上傳到網站。然而,在我進入該項目之前,我想弄清楚這是否可能。運行外部程序時的C#同步命令

我現在的示例腳本是一個簡單的批處理文件,在那裏我可以拖放多個文件到批處理文件。它會轉碼第一個文件,顯示一個輸出,然後繼續到第二個文件進行轉碼。這是我期待的預期行爲。

@echo off 
C:\g2mtranscoder.exe source=%~1 
echo %~1 has completed. 
C:\g2mtranscoder.exe source=%~2 
echo %~2 has completed. 
C:\g2mtranscoder.exe source=%~3 
echo %~3 has completed. 
C:\g2mtranscoder.exe source=%~4 
echo %~4 has completed. 
pause 

我的問題是,如果在C#(將是一個Windows服務,最終),那會是那樣簡單調用外部程序g2mtranscoder.exe做轉碼,然後把我的上傳腳本之後的權利?顯然,我不想上傳一個當前正在轉碼的視頻,也不希望視頻先上傳,而沒有先轉碼。

我subquestion將是把這個在一個循環(對於目錄中的每個文件)造成任何問題,如果該目錄的內容是永遠只被代碼轉換懸而未決的視頻?如果在循環中,它是否會嘗試循環並異步啓動目錄中的所有文件的代碼轉換,還是會更同步?我希望避免循環異步發生,因爲它可能使計算機過載,從而導致音頻/視頻計時出現僞影或同步問題。最重要的是,轉碼過程中的視頻或未轉碼的視頻無法上傳。

這個任何編碼的建議將是巨大的,但我真的尋找更多的C#如何與代碼執行與具有堪稱執行的C#代碼的中間外部程序的理解。

我更多的Ruby/Rails和Linux的人,並沒有對C#太多經驗。我知道有足夠的危險,但只是想確保我想要做的事情是可行的。

回答

0

我想通了。我可以創建一個進程,然後使用HasExited標誌等待進程完成。完成後,我可以繼續上傳程序。一個成功的退出將有HasExited0而失敗的退出將是1-1

StartInfo.Arguments可以讓我在source=<location of GTM video>傳遞到處理視頻文件。

Console.WriteLine("Running"); 
Process pr = new Process(); 
pr.StartInfo.FileName = "Notepad.exe"; 
pr.StartInfo.Arguments = "test.dat"; 
pr.Start(); 
while (pr.HasExited == false) 
    if ((DateTime.Now.Second % 5) == 0) 
    { // Show a tick every five seconds. 
     Console.Write("."); 
     System.Threading.Thread.Sleep(1000); 
    }