2016-06-01 3 views
0

Я хотел бы показать wait gif, проверяя файл, и это то, что я пробовал до сих пор.
Существует форма - Form1, где пользователь нажимает кнопку, чтобы проверить файл, и есть другая форма - Подождите, только с изображением с изображением gif.Показать окно модальной загрузки в Winforms для длительного процесса

button_click() 
{ 
    Wait wait = new Wait(); 
    wait.ShowDialog(); 
    VerifyFile(); 
    wait.Close(); 
} 

Форма ожидания отображается, но не закрывается. Кроме того, проверка также не выполняется. Он продолжается только тогда, когда я вручную закрываю форму Wait. Как автоматически закрыть форму ожидания, как только VerifyFile() завершен.

+0

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

+0

Возможный дубликат [Открыть вторую winform асинхронно, но все же вести себя как дочерний элемент в родительской форме?] (Http://stackoverflow.com/questions/2435752/open-a-second-winform-asynchronously-but-still-behave -as-a-child-to-the-parent-f) – NineBerry

ответ

0

Проблема с вашим кодом заключается в том, что метод Form.ShowDialog() является синхронным и ожидает результата из диалогового окна «Форма». Это означает, что выполнение кода сохраняется до тех пор, пока диалоговое окно ожидания не будет закрыто.

Рассмотрим перемещение метод VerifyFile() в диалоговом окне Wait:

class Wait: Form 
{ 
    public Wait() : base() 
    { 
     System.Threading.Tasks.Task.Factory.StartNew(() => VerifyFile()); 
    } 
} 

Вы можете закрыть этот диалог, когда после выполнения VerifyFile закончится.

+0

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

+1

Весь дизайн ООП - одна большая ошибка, но люди все еще используют его ... Я не знаю, почему люди здесь заботятся о «шаблонах дизайна» и т. Д. Если вы хотите быть творческим, отправляйте тонны строк кода, чтобы показать пример, который «хорошо разработан». –

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