在加载过程中显示动画

时间:2010-12-31 20:06:35

标签: c# winforms

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

我是在使用VS2010 C#

的Windows窗体上进行的

4 个答案:

答案 0 :(得分:5)

以下是一些示例代码,您可以如何加载文件aysnchronous。也许它会帮助你。我比使用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(); 

答案 1 :(得分:1)

您有两种选择。

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这样的事情可以用于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
                 {
                 }
            }    
     }