【问题标题】:Show a Animation during a loading在加载过程中显示动画
【发布时间】:2010-12-31 20:06:35
【问题描述】:

好吧,我想做的是在读取一个充满文件的目录时显示一个动画 gif,但是 UI 冻结,这没关系,但我想保持 gif 运行直到操作完成。有什么想法吗?

我正在使用 VS2010 C# 在 Windows 窗体上进行此操作

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    这里是一些示例代码,您可以如何异步加载文件。也许它可以帮助你。比起使用 DoEvents,我更喜欢这种方式。使用 DoEvents 我已经有了一些不好的副作用,因此我尽量不使用它。

    BackgroundWorker bgWorker = new BackgroundWorker() { WorkerReportsProgress=true}; 
    bgWorker.DoWork += (s, e) => {     
        // Load here your file/s     
        // Use bgWorker.ReportProgress(); to report the current progress 
    }; 
    bgWorker.ProgressChanged+=(s,e)=>{     
        // Here you will be informed about progress and here it is save to change/show progress. You can access from here savely a ProgressBars or another control. 
    }; 
    bgWorker.RunWorkerCompleted += (s, e) => {     
    // Here you will be informed if the job is done.
    // Use this event to unlock your gui
    }; 
    bgWorker.RunWorkerAsync(); 
    

    【讨论】:

      【解决方案2】:

      你有两个选择。

      1. 启动一个单独的线程来处理文件操作。

      2. 在文件循环中定期调用 Application.DoEvents()。这将导致您的应用程序处理待处理的消息(从而更新您的 UI),但会对文件处理循环的速度产生负面影响。

      从我的手机发帖,所以没有示例链接。

      【讨论】:

        【解决方案3】:

        运行枚举是一个单独的线程并在主线程中更新GUI。

        【讨论】:

        • 有任何文章谈论它吗?因为我不知道该怎么做
        【解决方案4】:

        这样的东西可以与 backgroundWorker 一起使用吗?

            private void buttonRename_Click(object sender, EventArgs e)
            {
                 backgroundWorker1.RunWorkerAsync();
            }
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                foreach (ListViewItem myitem in listView.Items)
                    {
                         try
                         {
                               //Rename
                         }
                         catch
                         {
                         }
                    }    
             }
        

        【讨论】:

        • 请不要发布提问的答案。发一个新帖子。顺便说一句,我不会直接访问 BG-Worker 中的 ListView。也许仅通过迭代和读取项目不会抛出异常(我从未尝试过),但这绝对不是一个好方法。创建一个文件名列表,然后在 BG-Worker 中使用此列表。
        • @HCL、@Eyla:但也不要发布完全相同的问题。您应该在此处编辑您的原始问题以添加您想出的代码。
        • @Code Gray:它真的是一模一样的吗?最初的问题是关于动画 gif 的。我不喜欢有人回答后改变的问题。这使得大多数答案无效,因为它们当时脱离了上下文。我认为这对回答最初问题的人不公平。
        猜你喜欢
        • 2013-09-28
        • 2020-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多