2010-06-02 2 views
0

У меня есть цикл, который принимает имя файла из списка, выполняет вызов system(), а затем перемещает это имя файла в другой список. Проблема в том, что он не перемещает имена файлов по одному за раз, но ждет, пока весь цикл не будет закончен, и сразу перемещает их. Что бы я сделал, чтобы заставить его выполнять то, что я хочу?Loop не обновляет списки до тех пор, пока не будет выполнено iterating

петля:

for each(String^% file in filename) 
{ 
    int x = convert(file); 
    lbComplete->Items->Add(lbFiles->Items[0]); // place the completed file 
    lbFiles->Items->Remove(lbFiles->Items[0]); // in the other listbox 
} 

Функция преобразования(), который содержит системный вызов:

int convert(String^ file) 
{ 
    std::stringstream ss; 
    std::string dir, fileAddress, fileName, outputDir; 
    ... 
    return system(ss.str().c_str());   
} 
+0

Возможно, это проблема с отсутствием вызова обновления экрана/виджета между обновлениями? –

+0

Похоже, консенсус верит в это. Не знал, что мне нужно это делать, так как я никогда не работал с формами. Угадайте, я пойду посмотрю, как – Justen

+0

В вашем цикле вы не даете системному времени перерисовывать элементы управления, вам нужно разрешить событиям рисования между каждой итерацией цикла, если вы хотите увидеть его на экране - что вызов зависит от того, какой пользовательский интерфейс вы используете (о котором вы не упомянули). –

ответ

1

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

for each(String^% file in filename) 
{ 
    int x = convert(file); 
    lbComplete->Items->Add(lbFiles->Items[0]); // place the completed file 
    lbFiles->Items->Remove(lbFiles->Items[0]); // in the other listbox 
    // INSERT REFRESH FUNCTION HERE 
} 
1

Скажите как ListBoxes подкрепиться после перемещения объекта.

2

Очень часто при программировании GUI методы, вызванные из «потока событий» или «цикла событий», должны заканчиваться до того, как изменения, которые они создают, видны на экране. Это независимо от языка или среды. Обычный способ избежать этой проблемы в том, что мне больше всего нравится (например, Java Swing), - это делать обновления за пределами цикла событий, но использовать уведомления (события свинг), чтобы сообщить графическому интерфейсу периодически обновлять дисплей.