C#队列进程具有不同的输入

时间:2017-11-06 05:07:07

标签: c# winforms listbox queue

我有三个listBox1,listBox2,listBox3存储输入文件。

  private void Bitrate()
    {
        //turn listBox into List
        List<String> data = new List<String>(listBox3.Items.Cast<String>());
        //do process for each item in the List
        Parallel.ForEach(data, (item) =>
        {
           System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "cmd.exe";
            ...............
         });

   private void button5_Click(object sender, EventArgs e)
    {
       Bitrate();
    }

上面的Bitrate()只处理ListBox3中的每个项目,我想让用户选择他们想用Bitrate()处理哪个列表框。 在我的情况下,我喜欢Bitrate(),Bitrate1(),...所以我想把工作放在队列中,例如:

Queue:
Bitrate() - listBox2
Bitrate() - listBox1
Bitrate1() - listBox3

现在,按钮5将开始按顺序逐个运行队列中的每个作业。我至少在一个飞蛾身上陷入了这个问题...请帮助我......我是新手,并试图自己去学习,这真是太痛苦了...... 现在我甚至想知道我的Bitrate()使用Parallel.ForEach,不知道它是否可以处理listBox中的所有项目..

1 个答案:

答案 0 :(得分:2)

在队列中运行每个作业使用异步,等待: -

private async void button5_Click(object sender, EventArgs e)
{await Task.Run(() =>{
            Bitrate(listBox1);
            Bitrate(listBox2);
            Bitrate(listBox3);
        });
}

 private async void Bitrate(List<...> list)
{
    //turn listBox into List
    List<String> data = new List<String>(list.Items.Cast<String>());
    //do process for each item in the List
    Parallel.ForEach(data, (item) =>
    {
       System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "cmd.exe";
        ...............
     });}

我认为它对你有用.........