2012-01-19 4 views
1

У меня есть приложение, которое проверяет количество архивов 7zip, если они не повреждены, и я хочу написать каждое действие в списке, но моя проблема заключается в том, что в списке не отображается каждая строка, когда я добавить элемент к нему, он обновляет на финише, и помещает все элементы в конце моего действия, даже если я использую свойство .StartUpdate() и EndUpdate()Сразу после обновления списка

Это часть моего кода:

foreach (string director in foldere) 
{ 
    if (director.ToLower().Contains("cluj") || director.ToLower().Contains("craiova") || director.ToLower().Contains("timisoara")) 
    { 
     String[] zipFile = Directory.GetFiles(director, "*.7z"); 
     foreach (string zip7 in zipFile) 
     { 
      //check arhive 
      SevenZipExtractor zipfile = new SevenZipExtractor(zip7); 
      if (zipfile.Check()) 
      { 
       String[] fisFaraArhiva = Directory.GetFiles(director, "*.*"); 
       foreach (string fisere in fisFaraArhiva) 
       { 
        if (fisere != zip7) 
        { 
         File.Delete(fisere); 
        } 
       } 
       listBox1.Items.Insert(0, "A fost sters fisierele din directorul " + director); 
       string[] fisComanda = Directory.GetFiles(utilizator, "*" + id + "*"); 
       foreach (string cmd in fisComanda) 
       { 
        File.Move(cmd, Path.Combine(director, Path.GetFileName(cmd))); 
        listBox1.BeginUpdate(); 
        listBox1.Items.Insert(0, "A fost mutata comanda " + Path.GetFileName(cmd) + " in director"); 
        listBox1.EndUpdate(); 
       } 
      } 
      else 
      { 
       MessageBox.Show("Arhiva nu este ok"); 
       listBox1.BeginUpdate(); 
       listBox1.Items.Insert(0, "Arhiva " + zip7 + " NU este OK"); 
       listBox1.BackColor = Color.Red; 
       listBox1.EndUpdate(); 
      } 
     } 
    } 
} 
if (listBox1.BackColor != Color.Red) 
{ 
    listBox1.BeginUpdate(); 
    listBox1.BackColor = Color.Green; 
    listBox1.EndUpdate(); 
} 

ответ

4

Try вызова listBox1.Update() после вставки элемента:

listBox1.Items.Insert(0, "A fost mutata comanda " + Path.GetFileName(cmd) + " in director"); 
listBox1.Update(); 
+0

Thaks очень, очень много! – XandrUu

5

Проблема заключается в том, что пользовательский интерфейс будет обновляться, когда поток пользовательского интерфейса успевает это сделать, но вы утверждаете, что поток пользовательского интерфейса. Есть два способа решить, что:

  1. Использование listBox1.Update(), чтобы заставить обновление пользовательского интерфейса или
  2. Используйте фоновый поток (BackgroundWorker), чтобы сделать обработку и это сообщить свой прогресс в Пользовательский интерфейс.
3

После того, как вы вставляете что-либо в свой список, позвоните в Update(). Это заставит обновление.

Таким образом, вместо

listBox1.BeginUpdate(); 
listBox1.Items.Insert(0, "A fost mutata comanda " + Path.GetFileName(cmd) + " in director"); 
listBox1.EndUpdate(); 

сделать

listBox1.Items.Insert(0, "A fost mutata comanda " + Path.GetFileName(cmd) + " in director"); 
listBox1.Update(); 
Смежные вопросы