2009-11-24 2 views
1

Я пытаюсь обновить/нарисовать список в режиме реального времени, но у меня возникли проблемы. У меня есть кнопка, чтобы начать процесс заполнения списка button_traceroute_Click.Проблема с C#, списком и графическим интерфейсом

Моя проблема в том, что список только окрашен/обновлен, когда весь процесс (нажатие кнопки) закончилось, я хотел, чтобы элементы были вставлены (просмотрены) один за другим. Я уже пробовал использовать ListBox.Update(), но ничего не произошло. (это трассировку)

private void button_traceroute_Click(object sender, EventArgs e) 
     { 
      String target; 
      int i = 0; 
      target = textBox_target.Text; 
      Mydata data = new Mydata(); 
      TraceRoute traceroute = new TraceRoute(); 
      while (i < 50 && !data.getReached() && !data.getError()) // i = hop count 
      { 
       data = traceroute.startTrace(target, data, i);    
       listBox_trace.Items.Add(data.getOutput()); 
       i++; 
      } 
     } 

data.getOutput() возвращает (строка) что-то вроде: "Садитесь X: 165.468.354.4 -> 50 мс" или "Hop X: Тайм-аут"

Mydata{ 
bool Finish flag; 
bool Error flag; 
int badcounter; 
String output; 
} 

На данный момент я заполняю список со строками, но целью является использование объекта.

ответ

4

Вам нужно положить длинную операцию на свою собственную нить. затем периодически сообщают о прогрессе в пользовательском интерфейсе.

Вы можете увидеть пример того, как сделать это в другом посте моего here.

0

Кроме того, вы можете использовать метод BeginUpdate и EndUpdate ускорить перекрашивание списка. Когда вызывается BeginUpdate, приостанавливается любая ожидающая краска в список, аналогично, EndUpdate возобновляет рисование, это может помочь сделать ваш список похожим, как если бы он быстро загружал в него данные и минимизировал количество рисунков, добавляя данные.

Надеюсь, это поможет, С уважением, Tom.

0

Попробуйте это:

data = traceroute.startTrace(target, data, i);         
listBox_trace.Items.Add(data.getOutput());     
Application.DoEvents(); 
i++; 

Его не идеал - ответ Майкла G является лучшим, но это может работать как быстро исправить.

Смежные вопросы