Se si tenta di visualizzare una MessageBox di un'applicazione che risiede nella system tray, può succedere che essa rimanga nascosta dalle altre finestre aperte sul desktop. Il problema è dovuto al fatto che la MessageBox appartiene ad un'applicazione che non è in foreground. Fortunamentamente, uno degli overload della funzione MessageBox.Show consente di specificare di fronte a quale finestra visualizzare il messaggio: il trucco, dunque, è visualizzare la MessageBox davanti alla finestra che attualmente è in primo piano.
Innanzo tutto dobbiamo definire una classe che restituisce la finestra in primo piano:
public class ForegroundWindow : IWin32Window
{
private static ForegroundWindow _window = new ForegroundWindow();
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
private ForegroundWindow() { }
public static IWin32Window Instance
{
get { return _window; }
}
IntPtr IWin32Window.Handle
{
get { return GetForegroundWindow(); }
}
}
A questo punto, per essere essere sicuri che la MessageBox sia visibile sul desktop, è sufficiente specificare la finestra in primo piano come "proprietaria" del messaggio:
MessageBox.Show(ForegroundWindow.Instance, "Questa finestra è visibile.", "Prova");
Fonte: MSDN Magazine di Luglio 2004