2011-01-15 27 views
5

Tengo una aplicación WPF que se ejecuta en la bandeja del sistema. Intento crear un menú contextual que aparece al hacer clic con el botón derecho en el icono de la bandeja. Aquí está el XAML:Menú contextual del botón derecho en la bandeja del sistema

<Window.Resources> 
     <ContextMenu x:Key="NotifierContextMenu" Placement="MousePoint"> 
      <MenuItem Header="Exit" Click="Menu_Exit"/> 
     </ContextMenu> 
    </Window.Resources> 

Y aquí está el código subyacente:

void NotifyIcon_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
     { 
      if (e.Button == System.Windows.Forms.MouseButtons.Right) 
      { 
       var menu = this.FindResource("NotifierContextMenu") as ContextMenu; 
       menu.IsOpen = true; 
      } 
     } 

     protected void Menu_Exit(object sender, RoutedEventArgs e) 
     { 
      NotifyIcon.Visible = false; 
      Application.Current.Shutdown(); 
     } 

El problema que estoy teniendo es que cuando se haga clic en el icono, se genera un error que NotifierContextMenu no se puede encontrar. ¿Qué me estoy perdiendo?

Respuesta

2

Intenté esto mismo sin problemas. Su controlador de eventos para MouseDown es, de hecho, parte de la misma clase que se crea NotifierContextMenu ¿verdad?

Quizás intente hacer un pequeño código para enumerar los recursos para ver si puede emparejar a qué conjunto de recursos se está refiriendo.

+0

Sí, están en la misma clase. Estoy ejecutando el código de Parallel.Foreach en esta aplicación, cuando lo comento funciona bien. ¿Alguna idea de cómo hacerlo funcionar? – Justin

+0

¿Hay alguna posibilidad de que ForEach esté causando problemas en ese hilo? ¿Puedes intentar crear un BackgroundWorker y poner las cosas Parallel.ForEach en eso para moverlo a un hilo diferente? Nunca he usado Parallel.ForEach, pero está relacionado con un montón de subprocesos en MSDN. Solo un pensamiento. – CodeWarrior

+0

Eso lo solucionó, gracias! – Justin

Cuestiones relacionadas