Bonjour à tous,

J'ai créé une librarie qui permet d'afficher une boite de dialog à partir d'une exception qu'on lui donne et de quelques autres infos... Le but est bien sur de pouvoir utiliser cette librairie dans toute l'applic de manière omogène.

Mon problème actuel est que l'un des composants qui utilise ma librairie lève une exception dans l'event "Closed" de sa fenêtre WPF et il aimerait que l'utilisateur soit tout de même notifié de cette erreur...

Au début je me suis dit owned c'est super simple...
Je n'ai qu'à identifier lorsque la fenêtre est en mode Closed et de pas la lier à mon dialogue...

Voici le contenu de la méthode qui me permet d'afficher mon dialog... "errorInfo" est un objet qui contient toutes les infos de mon dialog, le texte, l'exception, le lien ...


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
//méthode appellée par le client de la librairie
public static void ShowError(string contextMessage, System.Exception ex, string contextId)
{
  System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, showErrorDispatched, contextMessage, ex, contextId);
}
 
// méthode utilisée pour dispatcher l'appel dans le bon thread...
private static void ShowErrorDispatched(string contextMessage, System.Exception ex, string contextId)
{
  ErrorInfo errorInfo = new ErrorInfo(contextMessage, ex, contextId);
  ErrorDialog.Show(errorInfo);
}
// méthode qui crée puis affiche la boite
public show(ErrorInfo errorInfo)
{
  ErrorDialog errorDialog = new ErrorDialog(errorInfo);
  // windows.Count = errorDialog + toutes les autres fenêtre, donc si c'est 1
  // ou moins, c'est qu'il n'y a que errorDialog, donc pas de MainWindow
  if (Application.Current.Windows.Count > 1)
  {
    // lien avec la windows principale du moment
    errorDialog.Owner = Application.Current.MainWindow;
    errorDialog.ShowDialog();
  }
  else
  {
    // affiche une boite de dialog sans parent... MARCHE PAS
    errorDialog.ShowDialog();
  }
}
Mais comme ceci, mon dialogue ne s'affiche pas et la méthode showDialog retourne directement.

J'ai aussi essayé de créer une "Window" temporaire et de la donner comme owner au showdialog... rien à faire.

Est ce que quelqu'un aurait une petite idée par hasard ?