在语句bu中打开新的Thread,等到我的Thread在打开新的之前完成

时间:2012-12-30 11:56:01

标签: c# winforms

我在不同的线程中尝试我的操作里面的语句,但我想等到我的Tread将在打开新线程之前完成:

public class Play
{
    private string _filePath;
    private int _deviceNumber;

    public Play(string filePath, int deviceNumber)
    {
        _filePath = filePath;
        _deviceNumber = deviceNumber;
    }

    public void start()
    {
        Thread thread = new Thread(send);
        thread.IsBackground = true;
        thread.Start();
    }

    private void send()
    {
        ProcessStartInfo processStartInfo = new ProcessStartInfo(@"D:\SendQueue\SendQueue\bin\Debug\Send.exe");
        processStartInfo.Arguments = string.Format("{0} {2}{1}{2}", (_deviceNumber).ToString(), _filePath, "\"");
        processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        processStartInfo.RedirectStandardOutput = true;
        processStartInfo.RedirectStandardError = true;
        processStartInfo.CreateNoWindow = true;
        processStartInfo.UseShellExecute = false;
        processStartInfo.ErrorDialog = false;

        using (Process process = Process.Start(processStartInfo))
        {
            process.WaitForExit();
        }
    }
}

从开始按钮单击我播放列表框中的所有文件:

for (int i = 0; i < ListBox.Items.Count && shouldContinue; i++)
{
    PlayFile play = new PlayFile ((string)ListBox.Items[i], add);
    playCapture.start();
}

1 个答案:

答案 0 :(得分:0)

    Task taskA = Task.Factory.StartNew(() => send());
    taskA.Wait();

但是这会阻塞任务的调用者线程(工作将在第二个线程中完成,但实际上,调用者线程将在执行期间被阻止)你不会从另一个线程中的工作中受益!

This link会帮助您

如果你需要在另一个线程中完成所有工作,并保持主流不受阻塞,你可以将for语句放在一个线程中,这将完美地运行。