2014-11-18 5 views
0

В симуляторе, который я пишу, я использую SFML и OpenGL для создания визуализации с помощью базового графического интерфейса на основе OpenGL. Теперь мне нужно добавить диалог выбора файла. Мне было интересно, могу ли я использовать System.Windows.Forms.OpenFileDialog и динамически обновлять его события аналогично тому, как OpenCV позволяет вам обновлять окна с помощью cv :: waitkey().Диалоги обновления Windows Forms/под Windows динамически

Поскольку OpenFileDialog.ShowDialog() не возвращается до тех пор, пока окно не будет уволено, все, что мне нужно сделать, это как-то закрыть диалоговое окно, обновив его.

Мне бы не пришлось вызывать Application.Run() и оставить его в фоновом режиме, потому что мое приложение уже построено вокруг основного цикла, а Application.Run() берет на себя основной поток.

ответ

0

Эквивалентный вызов сорте :: WaitKey является:

Application.DoEvents() 

Однако после прочтения Use of Application.DoEvents() оказывается, что Application.DoEvents() гораздо более хрупкая, то резюме :: WaitKey. Это может привести к сбою приложения, если нет открытой формы выигрыша.

Альтернативный подход

Я решил перейти на GTK #, поскольку он позволяет обрабатывать события, как они происходят, проверяя, существуют ли какие-либо события в очереди событий, вызвав Gtk.Application.EventsPending(). Затем события могут обрабатываться с помощью Gtk.Application.RunIteration() в таком цикле:

while (Gtk.Application.EventsPending()) 
{ 
    Gtk.Application.RunIteration(); 
} 
Смежные вопросы