Windows 窗体线程和事件 - 列表框更新迅速,但进度条经历巨大延迟

2024-03-17

我们的团队正在创建一个新的招聘工作流程系统来取代旧的系统。我的任务是将旧数据迁移到新模式中。我决定通过创建一个小型 Windows 窗体项目来实现此目的,因为架构完全不同,并且直接的 TSQL 脚本并不是一个足够的解决方案。

执行此工作的主要密封类“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 携带字符串消息、进度条的最大 int 值和当前进度 int 值。 Windows 窗体订阅该事件:

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;
            }
        }

问题是列表框似乎更新得很快,但进度条永远不会移动,直到批处理几乎完成为止???是什么赋予了 ?


也许你可以尝试BackgroundWorker组件。它使线程更容易。示例如下:

  • BackgroundWorker 线程和支持取消 http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads.aspx
  • 在.NET 2应用程序中使用BackgroundWorker组件 http://www.c-sharpcorner.com/UploadFile/LivMic/BGWorker07032007000515AM/BGWorker.aspx
  • 后台工作人员示例 http://www.danielmoth.com/Blog/2004/12/backgroundworker-sample.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 窗体线程和事件 - 列表框更新迅速,但进度条经历巨大延迟 的相关文章

随机推荐