ファイルをメモリに読み込んでから、各行に対して 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;
}