BackgroundWorker の使用に問題があります。何が起こるかというと、BackgroundWorker プロセスが正常に機能し、開始するまでに 40 ~ 50 秒かかることがあります。
問題は 2 台のマシンで発生しました。BackgroundWorker 操作は 1 日を通して正常に機能していましたが、午後になるとこの問題が発生し始め、プロセスに 1 秒ではなく 40 秒かかるようになりましたが、これはまれにしか発生しませんでした。そのうちの 5 つを問題なく実行でき、6 つ目は 40 秒かかります。その後、さらに 5 罰金を行うことができます。1 秒以上かかるようになった場合は、workingDialog でキャンセルを押してすぐにやり直すと、機能します。さらに調べてみると、ワーカーはすぐに DoWork メソッドを開始していないようです。
スレッドか何かが不足している可能性がありますか?それとも、BackgroundWorker の破棄方法に問題があるのでしょうか? コードは以下のとおりです。
using (workingDialog = new Dialogs.WaitDialog()) {
StartThreadedWork(MyDoWorkMethod, customerID);
// if user presses cancel button
if (workingDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) {
m_Worker.RunWorkerCompleted -= ThreadFinished;
}
}
m_Worker.Dispose();
m_Worker = null;
「StartThreadedWork」メソッドは以下のとおりです。
private void StartThreadedWork(DoWorkEventHandler method, int customerID) {
m_Worker = new BackgroundWorker();
m_Worker.DoWork += method;
m_Worker.RunWorkerCompleted += ThreadFinished;
object[] parameters = new object [] {customerID };
m_Worker.RunWorkerAsync(parameters);
}
最後に、DoWork イベント ハンドラに割り当てられるメソッドは次のとおりです。
private void ThreadSyncing(object sender, DoWorkEventArgs e) {
object[] parameters = e.Argument as object[];
int customerID = (int)parameters[0];
Customer resultCustomer = new Customer(FormsManager.Instance.BillingWebService.Customer_GetByCustomerID(customerID, CustomerSyncOption.Default));
e.Result = resultCustomer;
}
RunWorkerCompleted イベントが発生すると、ダイアログの結果が OK に設定され、ダイアログが閉じます。
これに関する任意のポインタは非常に高く評価されます!
ありがとう、