C# PictureBox ChangeImage

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShkiperLol, 26 Sep 2010.

  1. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Здраствуйте есть вопрос.

    Я меняю изображения по цыклу. PictureBox зависает. И показывает только последнию картинку. Как исправить...

    BackGroundWorker не помогает!
     
  2. ViLKaa

    ViLKaa Member

    Joined:
    24 Jul 2009
    Messages:
    41
    Likes Received:
    7
    Reputations:
    5
    как сменил пиши
    Applications.DoEvents();
     
  3. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    непомогло
     
  4. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    не совсем понял проблему. но может поможет invalidate() ? код бы глянуть.
     
  5. ViLKaa

    ViLKaa Member

    Joined:
    24 Jul 2009
    Messages:
    41
    Likes Received:
    7
    Reputations:
    5
    массивкартинок
    for(int i=0;i<массивкартинок.lenght;i++)
    {
    picbox.image=массивкартинок;
    appications.doevents;
    thread.sleep(1000);
    }

    или я не совсем понял задачу)
     
  6. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0


    Задачу ты понел правильно.

    Мне нужно так - я делаю скрин дектопа отображаю и так по циклу и но оно зависает (PictureBox зависает)
     
  7. zORG

    zORG New Member

    Joined:
    5 Jun 2010
    Messages:
    44
    Likes Received:
    2
    Reputations:
    0
    в другом потоке надо менять картинки и слип ставить
     
  8. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Код плиз
     
  9. zORG

    zORG New Member

    Joined:
    5 Jun 2010
    Messages:
    44
    Likes Received:
    2
    Reputations:
    0
    Code:
    using System.Threading;
    
    на кнопку или че там у тебя
    
    Thread mainThread = new Thread(new ThreadStart(MainFunc)); 
    mainThread.Start();
    
    и сама функция для потока
    
    public void MainFunc()
    {
          for(int i=0;i<массивкартинок.lenght;i++)
          {
                picbox.image=массивкартинок[i];
                Thread.sleep(1000);
          }
    }
    
    При дебаге будут ошибки, потому что надо юзать InvokeRequired, 
    запускай без дебага (ctrl+F5)
    
    до этого твой слип вешал всю форму, конечно ничего и не увидишь,
    doevents по идее должен был помочь, но я его не юзаю.
    и бэкграунд воркер тоже помочь должен, видимо ты юзал как-то криво.
     
    #9 zORG, 29 Sep 2010
    Last edited: 29 Sep 2010
  10. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    мда...

    Вот весь твой код
    button1 собирает картинки
    button2 запускает background worker
    PHP:
    private List<Image_images = new List<Image>();

            private 
    void button1_Click(object senderEventArgs e)
            {
                var 
    dirInfo = new DirectoryInfo(Application.StartupPath);
                foreach (var 
    fileInfo in dirInfo.GetFiles("*.png"))
                {
                    
    _images.Add(new Bitmap(fileInfo.FullName));
                }
            }

            private 
    void button2_Click(object senderEventArgs e)
            {
                
    backgroundWorker1.RunWorkerAsync();
            }

            private 
    void backgroundWorker1_DoWork(object senderDoWorkEventArgs e)
            {
                foreach (var 
    image in _images)
                {
                    
    Thread.Sleep(2000);
                    
    backgroundWorker1.ReportProgress(-1image);
                }
            }

            private 
    void backgroundWorker1_ProgressChanged(object senderProgressChangedEventArgs e)
            {
                
    pictureBox1.Image = (Imagee.UserState;
            }
    ...