2017-02-11 1 views
0

Je souhaite attendre la fin d'une opération avant de poursuivre directement l'opération suivante. (Opération 1) Le programme désérialise un modèle de vue et affiche les données dans un DataGrid.WPF - Attendre la fin de la tâche avant de continuer

(Operation2) Le programme définit la hauteur requise de la fenêtre. (Opération3) Le programme restitue et enregistre une image de la grille de données.

(Operation4) Le programme se ferme. À l'heure actuelle, le programme se bloque parce que je crois que certaines opérations n'ont pas le temps nécessaire pour terminer correctement. Quand j'ai eu un messagebox en haut du code, ça a bien fonctionné. Travailler dans VS 2015. NET 4.5, comment puis-je y parvenir?

 //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

"À l'heure actuelle, le programme se bloque", pourriez-vous prévoir une exception? – Karolis

+0

Utilisez (Dispatcher.Invoke (new Action (() => {}), DispatcherPriority.ContextIdle, null);) - comme des codes afin de vous assurer que tout est prêt. – Ron

+0

Merci Ramin, ça marche! –

Répondre

0

Je ne pense pas que votre application ait planté en raison de l'exemple de code affiché. Il doit y avoir un autre code dans votre projet qui provoque un plantage lorsque vous essayez d'arrêter votre application en utilisant la ligne suivante. Sans oublier que vous pouvez valider votre code en utilisant le mode F10 en mode de débogage.

0

Utilisez les éléments suivants afin de vous assurer que tout est prêt:

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

This table peut vous aider à décider DispatcherPriority est plus approprié.