2017-02-11 11 views
0

Я хочу дождаться завершения операции, прежде чем продолжить следующую операцию.WPF - Дождитесь завершения задачи перед запуском

(Операция 1) Программа десериализует режим просмотра и отображает данные в datagrid.

(Operation2) Программа устанавливает требуемую высоту окна.

(Operation3) Программа отображает и сохраняет изображение datagrid.

(Operation4) Программа закрывается.

В настоящий момент программа вылетает из строя, потому что я считаю, что определенные операции не имеют необходимого времени для правильной работы. Когда у меня появилось окно с сообщениями в верхней части кода, он работал нормально. Работа в VS 2015 .net 4.5, как я могу это достичь?

 //MessageBox.Show("Hello"); 
     BinaryFormatter reader = new BinaryFormatter(); 
     using (var file = File.Open(v, FileMode.Open)) 
     { 
      this.Vm = (ViewModel)reader.Deserialize(file); 
     } 
     this.DataContext = Vm; 


     myRef = (CollectionViewSource)this.Resources["ColViewSource"]; 

     properHeight = (myRef.View.Groups.Count - 1) * 50; 

     foreach (var item in Vm.Collection) 
     { 

      properHeight += 55; 
     } 
     this.Height = properHeight; 
     CreateBitmapFromVisual(grid, "picture.png"); 
     Application.Current.Shutdown(); 
+0

«Прямо сейчас программа вылетает», не могли бы вы предоставить исключение? – Karolis

+0

Используйте (Dispatcher.Invoke (новые действия (() => {}), DispatcherPriority.ContextIdle, null);) - как коды, чтобы убедиться, что все готово. – Ron

+0

Спасибо Рамин, работает! –

ответ

0

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

Application.Current.Shutdown(); 

Не говоря уже, но вы можете проверить свой код с помощью F10 в режиме отладки.

0

Используйте следующее для того, чтобы убедиться, что все готово:

Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null); 

This table может помочь вам решить, какой DispatcherPriority является более целесообразным.