1

別のスレッドでステートメントの内部で操作を試みますが、新しいスレッドを開く前に、トレッドが終了するまで待ちたいです。

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();
}
4

1 に答える 1

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

ただし、これによりタスクの呼び出し元スレッドがブロックされます(作業は2番目のスレッドで実行されますが、実際には実行中に呼び出し元スレッドがブロックされます)、別のスレッドで作業を実行してもメリットはありません。

このリンクはあなたを助けます

forすべての作業を別のスレッドで実行する必要があり、メインストリームをブロックせずに続行する必要がある場合は、ステートメントをスレッドに入れることができます。これは完全に機能します。

于 2012-12-30T11:58:23.060 に答える