2013-06-20 2 views
0

Я создаю приложение, которое будет оставаться в лотке, время от времени он будет выполнять служебный вызов, и если служба вернет результат, он покажет его как хорошее окно в нижнем правом углу.
Я нашел красивый компонент как codeproject - http://www.codeproject.com/Articles/277584/Notification-Window Это уведомление работает хорошо, если оно используется в приложении форм, но когда я пытаюсь показать его из ApplicationContext, оно останавливает мое приложение - уведомление отображается, но когда я пытаюсь щелкнуть по нему, получить ошибку ответа.Окно ApplicationContext и message в нижнем правом углу

class TrayContext : ApplicationContext 
{ 
    private System.Timers.Timer appointmentTimer; 
    private PopupNotifier notification; 

    public TrayContext() 
    { 
     notification = new PopupNotifier 
      { 
       AnimationDuration = 500, 
       ContentFont = new System.Drawing.Font("Tahoma", 8F), 
       Image = null, 
       OptionsMenu = null, 
       Scroll = false, 
       ShowHandCursor = false, 
       Size = new System.Drawing.Size(400, 100), 
       TitleFont = new System.Drawing.Font("Segoe UI", 11.25F) 
      }; 

     //timer 
     appointmentTimer = new System.Timers.Timer(); 
     appointmentTimer.Interval = 600000; 
     appointmentTimer.Elapsed += AppointmentTimerTimerElapsed; 
     appointmentTimer.Start(); 
    } 
    private void AppointmentTimerTimerElapsed(object sender, ElapsedEventArgs e) 
    { 
     appointmentTimer.Stop(); 
     notification.TitleText = "Test"; 
     notification.ContentText = "This should work"; 
     notification.Popup(); 
     appointmentTimer.Start(); 
    } 
} 

Вот поведение, что я получаю (курсор занят не указатель): enter image description here

Я пытался сделать это с помощью делегатов, а потому, что я использую ApplicationContext у меня нет метод BeginInvoke, но даже добавив, что нравится ниже не помогло:

private void BeginInvoke(Delegate callback, object[] args) 
{ 
    syncContext.Post(state => callback.DynamicInvoke((object[])state), args); 
} 

Я могу показать это уведомление от формы, но как я должен показать его от ApplicationContext?

ответ

0

Я понял это.

я использовал:

private System.Timers.Timer appointmentTimer; 

должно быть:

private System.Windows.Forms.Timer appointmentTimer; 

Но, наверное, лучше подходит для этого. Я не считаю свой ответ правильным, потому что я буду ждать дольше, возможно, лучше ответить.

Смежные вопросы