私は次のコードを持っています:
// 1.
public void RunSQL(QuerySetup querySetup)
{
//querySetup.Users is 10
for (int i = 1; i <= querySetup.Users; i++)
{
querySetup.CurrentUser = i;
var worker = new BackgroundWorker {WorkerReportsProgress = true};
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.RunWorkerAsync(querySetup);
}
}
// 2.
void worker_DoWork(object sender, DoWorkEventArgs e)
{
var querySetup = e.Argument as QuerySetup;
// Doing stuff...
e.Result = querySetup.CurrentUser;
}
// 3.
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("User " + e.Result.ToString() + " is done.");
}
私の目標は、最後に次のことを取得することです。
ユーザー1が完了しました
ユーザー2が完了しました
..。
ユーザー10が完了しました
(その特定の順序ではありません)
しかし、私は10倍の「ユーザー10が完了しました」しか得られません。
しかし、なぜ?後で識別できるように、ワーカープロセスに何らかの方法でマークを付ける必要があります。