0

ファイルをメモリに読み込んでから、各行に対して Web サービス呼び出しを実行しようとしています。私がやろうとしているのは次のようなものです: 1. ファイルを読み込みます 2. 新しいスレッドを作成します - > 行 1 の Web サービス呼び出しを実行します 3. 新しいスレッドを作成します - > 行 2 の Web サービス呼び出しを実行します 4. "ステータスを更新します" サービス コール 1 または 2 のどちらか先に返された結果のボックス

つまり、ファイル内の各行に対して複数の Web サービス呼び出しを実行し、ステータス ボックスが戻ってきたら更新しようとしています。1 つの呼び出しを行い、最初の呼び出しが返された後に 2 番目の呼び出しを開始したくありません。

readFileBackgroundWorker.IsBusy編集:デバッグ中に言及するのを忘れていましたが、 foreach ループを通過するときに呼び出しが1 つしか行われないことに気付きましたtrueが、それを削除するとエラーが発生しますThis BackgroundWorker is currently busy and cannot run multiple tasks concurrently.

ファイルの読み取り:

private void uxReadFileButton_Click(object sender, EventArgs e)
    {
        uxFileStatusLabel.Text = String.Empty;
        this.uxReadFileButton.Enabled = false;
        this.uxCancelReadingFileButton.Enabled = true;
        var clientList = ReadFile(uxFileNameBox.Text);

        foreach (var client in clientList)
        {
            if (readFileBackgroundWorker.IsBusy != true)
            {
                readFileBackgroundWorker.RunWorkerAsync(client);
            }
        }
    }

 private void readFileBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        var worker = (BackgroundWorker)sender;
        ProcessClient((ClientObject)e.Argument, worker, e);
    }

 private void ProcessClient(ClientObject client, BackgroundWorker worker, DoWorkEventArgs e)
    {
        try
        {
            client.FileClientDischarge(SystemCode, UserName, Password);
            int percent = (int)(Math.Ceiling(((double)(client.RecordNumber + 1) / 121) * 100));
            worker.ReportProgress(percent, client);
        }
        catch (Exception ex)
        {
            worker.CancelAsync();
        }
        e.Result = client.RecordNumber;
    }
4

3 に答える 3