早上好, 在我的应用程序中,我以这种方式使用特定的录音软件:
//OLD CODE
ProcessStartInfo start = new ProcessStartInfo();
start.Arguments = arguments;
start.FileName = "PROGRAM FOR RECORDING AUDIO";
start.WindowStyle = ProcessWindowStyle.Normal;
start.CreateNoWindow = true;
//use timer
runTimer();
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
}
//Create mp3 and other operations
work();
当我退出此程序时,我的应用程序会创建mp3并执行其他操作。在录制过程中,该程序每分钟创建一次文件并用日期和时间命名。 我想更新应用程序表单中的列表框,添加创建的新mp3文件的名称。 为此,我使用了一个计时器:
public void runTimer()
{
aTimer.Elapsed += new ElapsedEventHandler(RunEvent);
aTimer.Interval = 10000;
aTimer.Enabled = true;*/
int timeout = Timeout.Infinite;
int interval = 10000;
TimerCallback callback = new TimerCallback(RunEvent);
System.Threading.Timer timer = new System.Threading.Timer(callback, null, timeout, interval);
timer.Change(0, 10000);
}
public void RunEvent(object state)
{
//search file and update listbox
}
但只有在退出录音软件时,列表框才会更新。 我用以下代码更改了旧代码:
//TEST
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = "PROGRAM FOR RECORDING AUDIO";
pr.StartInfo = prs;
ThreadStart ths = new ThreadStart(delegate() { pr.Start(); });
Thread th = new Thread(ths);
th.Start();
通过这种方式,列表框可以正确更新。 但是我不知道如何处理录音软件的闭包以便使用我的旧代码中的work()方法。抱歉我的英文不好;)
答案 0 :(得分:0)
您可以使用异步操作。例如:
//use timer
//runTimer(); //Not needed now
Task.Factory.StartNew(() => {
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
}
work(); //If you need to wait the process to finish
});
work(); //If you don't need to wait the process to finish