我们的团队正在创建一个新的招聘工作流程系统来取代旧的。我的任务是将旧数据迁移到新模式中。我已经决定通过创建一个小型的Windows Forms项目来完成这个工作,因为架构完全不同,直接的TSQL脚本不是一个适当的解决方案。Windows窗体线程和事件 - ListBox更新迅速,但进度条经历了巨大的延迟
,它的工作声明了以下代表活动的主要密封类“ImportController”:
public delegate void ImportProgressEventHandler(object sender, ImportProgressEventArgs e);
public static event ImportProgressEventHandler importProgressEvent;
主窗口开始使用一个新的线程在类的静态方法:
Thread dataProcessingThread = new Thread(new ParameterizedThreadStart(ImportController.ImportData));
dataProcessingThread.Name = "Data Importer: Data Processing Thread";
dataProcessingThread.Start(settings);
ImportProgressEvent args携带一个字符串消息,进度条的max int值和当前进度int值。 Windows窗体subcribes到事件:
ImportController.importProgressEvent += new ImportController.ImportProgressEventHandler(ImportController_importProgressEvent);
,并用它自己的代表回应了这样的情况:
private delegate void TaskCompletedUIDelegate(string completedTask, int currentProgress, int progressMax);
private void ImportController_importProgressEvent(object sender, ImportProgressEventArgs e)
{
this.Invoke(new TaskCompletedUIDelegate(this.DisplayCompletedTask), e.CompletedTask, e.CurrentProgress, e.ProgressMax);
}
最后的进度条和列表框更新:
private void DisplayCompletedTask(string completedTask, int currentProgress, int progressMax)
{
string[] items = completedTask.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
foreach (string item in items)
{
this.lstTasks.Items.Add(item);
}
if (currentProgress >= 0 && progressMax > 0 && currentProgress <= progressMax)
{
this.ImportProgressBar.Maximum = progressMax;
this.ImportProgressBar.Value = currentProgress;
}
}
事情是ListBox似乎更新非常快,但进度条永远不会移动,直到批处理几乎完成无论如何???是什么赋予了 ?