zoukankan      html  css  js  c++  java
  • 升级LoadingIndicator

    ChinaCock中的组件CC.LoadingIndicator,有很好的显示效果,以前也写过使用说明,可以去看看

    在使用的过程中,我一般是这样调用:

      CCLoadingIndicator1.ShowLoadingIndicator('正在查询,请稍候...');
      Scheduler.Run(procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                    begin
                         //在线程中执行查询等任务
                    end)
               .SynchronizedAfterRun(procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                                     begin
                                        //线程执行完成,同步主线程,一般同步界面显示 
    CCLoadingIndicator1.HideLoadingIndicator;
    end) .WhenException(procedure (const AException:Exception) begin   CCLoadingIndicator1.HideLoadingIndicator; ApplicationShowException(AException); end) .Activate;

    通过上面的代码,可以看到,配对的使用ShowLoadingIndicator与HideLoadingIndicator,以保证在线程中的任务执行完成后,隐藏掉CCLoadingIndicator的显示,这看起来似乎很完美了,但对于同时发起多个线程的情况下,就不行了。例如下面的代码:

    //发起第一个线程任务
      CCLoadingIndicator1.ShowLoadingIndicator('正在执行第一个任务,请稍候...');
      Scheduler.Run(procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                    begin
                         //在线程中执行查询等任务
                    end)
               .SynchronizedAfterRun(procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                                     begin
                                        //线程执行完成,同步主线程,一般同步界面显示 
                                        CCLoadingIndicator1.HideLoadingIndicator;    
                                     end)
               .WhenException(procedure (const AException:Exception)
                              begin
                                   CCLoadingIndicator1.HideLoadingIndicator;
                                   ApplicationShowException(AException);
                              end)
               .Activate;
    ...
    //发起第二个线程任务
      CCLoadingIndicator1.ShowLoadingIndicator('正在执行第二个任务,请稍候...');
      Scheduler.Run(procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                    begin
                         //在线程中执行查询等任务
                    end)
               .SynchronizedAfterRun(procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                                     begin
                                        //线程执行完成,同步主线程,一般同步界面显示 
                                        CCLoadingIndicator1.HideLoadingIndicator;    
                                     end)
               .WhenException(procedure (const AException:Exception)
                              begin
                                   CCLoadingIndicator1.HideLoadingIndicator;
                                   ApplicationShowException(AException);
                              end)
               .Activate;
    ...

     上面的代码,我只是为了说明问题,所以只是简单的复制出来样子,发起两个线程任务。具体执行起来,不管哪一个任务先完成,都会调用HideLoadingIndicator,让LoadingIndicator不再显示,而这时候,没有执行完的任务还需要LoadingIndicator显示,矛盾就这样产生了。

    经改后升级的LoadingIndicator,完美的解决了这个问题!

    代码中发起线程任务是用的kbmMW Scheduler Framework。我有译过这方面的文章,可以去查阅。

  • 相关阅读:
    使用python自带的http server共享文件
    vim常用快捷键与快捷操作
    wordpress 安装中文插件提示:To perform the requested action, WordPress needs to access your web server. Please enter your FTP cr
    python async异步编程,await后接task(三)
    虚拟机下ubuntu使用df命令查看磁盘空间小于实际空间
    python线程池
    使用Redis连接错误处理It was not possible to connect to the redis server(s);to create a disconnected multiple
    Sqlite数据库设置密码小工具
    [转]netcore一键部署到linux服务器以服务方式后台运行
    C#3种常见的定时器(多线程)
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/12462777.html
Copyright © 2011-2022 走看看