我在使用 BackgroundWorker 时发现了一个问题。发生的情况是 BackgroundWorker 进程可以正常工作,然后偶尔需要大约 40-50 秒才能开始。
该问题出现在两台机器上。BackgroundWorker 操作一整天都运行良好,然后在下午开始出现此问题,该过程需要 40 秒而不是 1 秒,但只是偶尔发生。你可以做好其中的 5 个,而第 6 个则需要 40 秒。然后你可以再做 5 次罚款。如果它确实开始花费超过一秒的时间,您可以在 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 并关闭对话框。
对此的任何指示将不胜感激!
谢谢,