【发布时间】:2016-09-28 13:56:32
【问题描述】:
我有一个有效的 vb.net 程序,它简单地使用 process.start(MPC-HC.exe) 自动按顺序播放音乐文件的文本文件列表。一切都很好,除非用户希望在列表未完成时停止播放任何进一步的音乐。
按照建议更新代码后仍有 1 个问题: 因为我希望音乐在没有用户干预的情况下自动播放 - 我需要在每个选择自行完成播放后指定播放器关闭。这可以通过命令行开关“/play /close”来完成。
我该怎么做:
- 指定要使用的播放器。
- 添加命令行开关
在我的原始代码中,我使用了 -
Dim startInfo As New ProcessStartInfo
startInfo.FileName = OpenWith
startInfo.Arguments = f
在哪里
OpenWith = "C:\Program Files\mpc-hc\mpc-hc.exe"
f = vbDoubleQuote + TextLine + vbDoubleQuote + " /play /close"
我如何通过流程完成这些事情?
谢谢,
罗斯
这是更新后的 vb.net 代码以及建议的答案:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
OpenFileDialog1.Title = "Please Select a File"
OpenFileDialog1.InitialDirectory = "C:\"
OpenFileDialog1.Filter = "Text Files|*.txt"
OpenFileDialog1.DefaultExt = "*.txt"
OpenFileDialog1.FileName = "*.txt"
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.CheckFileExists Then
filePaths = New Queue(Of String)(File.ReadAllLines(OpenFileDialog1.FileName))
'Execute the first file.
process = Process.Start(filePaths.Dequeue())
Process.EnableRaisingEvents = True
End If
End Sub
Private Sub process_Exited(sender As Object, e As EventArgs) Handles process.Exited
If filePaths.Count = 0 Then
'No more files to execute.
Application.Exit()
Else
'Execute the next file.
Process = Process.Start(filePaths.Dequeue())
Process.EnableRaisingEvents = True
End If
End Sub
【问题讨论】:
-
这是因为您通过执行
.WaitForExit()阻塞了 UI 线程。您需要响应Exited事件才能知道何时移动到下一个文件。 -
我不完全理解 - 需要明确的是,我无法退出主应用程序,因为我正在使用 .WaitForExit()?正如所写,这对于不能一次播放所有音乐文件和打开太多文件是必要的。请进一步解释我如何“响应退出事件”。
-
jmcilhinney 的回答就是我的建议。
标签: vb.net