运行外部程序时的C#同步命令

运行外部程序时的C#同步命令,c#,asynchronous,synchronous,external-process,C#,Asynchronous,Synchronous,External Process,我的任务是每天晚上对一堆GoToMeeting视频文件进行转码。视频转码后,将上载到网站。然而,在我深入这个项目之前,我想弄清楚这是否可行 我当前的示例脚本是一个简单的批处理文件,我可以将几个文件拖放到批处理文件上。它将对第一个文件进行转码,显示输出,然后继续对第二个文件进行转码。这是我期待的行为 @echo off C:\g2mtranscoder.exe source=%~1 echo %~1 has completed. C:\g2mtranscoder.exe source=%~2 ec

我的任务是每天晚上对一堆GoToMeeting视频文件进行转码。视频转码后,将上载到网站。然而,在我深入这个项目之前,我想弄清楚这是否可行

我当前的示例脚本是一个简单的批处理文件,我可以将几个文件拖放到批处理文件上。它将对第一个文件进行转码,显示输出,然后继续对第二个文件进行转码。这是我期待的行为

@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
那样简单,进行代码转换,然后将我的上传脚本放在后面?显然,我不想上传当前正在转码的视频,也不想在没有先转码的情况下上传视频

我的子问题是,如果目录中的内容只是待转码的挂起视频,那么将其放入循环(对于目录中的每个文件)是否会导致任何问题?如果在循环中,它会尝试异步循环并启动目录中所有文件的转码,还是更同步?我希望避免异步发生循环,因为它可能会使机器过载,从而导致音频/视频计时出现伪影或同步问题。最重要的是,在转码或未转码视频的中间的视频不能上载。 < >对于这一点的任何编码建议都是很好的,但是我真的希望更多地了解C是如何执行代码执行的,在执行的C代码中有一个外部程序调用。
我比较喜欢Ruby/Rails和Linux,对C#没有太多经验。我知道这很危险,但我只是想确保我要做的事情是可行的。

我明白了。我可以创建一个进程,然后使用HasExited标志等待进程完成。一旦完成,我可以继续上传程序。成功退出的
HasExited
值为
0
,而失败退出的值为
1
-1

StartInfo.Arguments
将允许我传入
source=
以处理视频文件

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);
    }