Показывать анимацию во время загрузки - PullRequest
2 голосов
/ 31 декабря 2010

Что я пытаюсь сделать, это показать анимированный GIF, пока он читает каталог, полный файлов, однако пользовательский интерфейс зависает, что нормально, но я бы хотел, чтобы GIF работал до завершения операции.Любые идеи?

Я делаю это в форме Windows, используя VS2010 C #

Ответы [ 4 ]

5 голосов
/ 31 декабря 2010

Вот пример кода, как вы можете загрузить свои файлы в асинхронном режиме.Может быть, это поможет вам.Мне нравится этот способ больше, чем использование 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 голос
/ 31 декабря 2010

У вас есть два варианта.

  1. Запустить отдельный поток для обработки файловых операций.

  2. периодически вызывать Application.DoEvents () внутри файлового цикла. Это заставит ваше приложение обрабатывать ожидающие сообщения (таким образом, обновляя ваш интерфейс), но отрицательно скажется на скорости цикла обработки файлов.

Публикация с моего телефона, поэтому нет примеров ссылок.

0 голосов
/ 31 декабря 2010

Хотелось бы что-нибудь подобное с 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
                 {
                 }
            }    
     }
0 голосов
/ 31 декабря 2010

Выполнение перечисления является отдельным потоком и обновление графического интерфейса в основном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...