首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行外部程序时的C#同步命令

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

Stack Overflow用户
提问于 2013-07-25 21:09:47
回答 1查看 554关注 0票数 0

我的任务是每天晚上对一堆GoToMeeting视频文件进行代码转换。一旦视频被转码,它将被上传到一个网站。然而,在我跳得太远之前,我想弄清楚这是否可能。

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

代码语言:javascript
复制
@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#方面没有多少经验。我知道的足够危险,但只是想确保我想要做的是可行的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-28 13:52:11

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

StartInfo.Arguments将允许我传入source=<location of GTM video>来处理视频文件。

代码语言:javascript
复制
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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17868802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档